2D圖形
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt
散點圖
【散點圖需要兩個參數x,y,但此時x不是表示x軸的刻度,而是每個點的橫坐標!】
scatter()
通過散點圖 可以研究 兩個特征之間的關系
x = np.random.normal(loc=0,scale=5,size=1000) y = np.random.normal(loc=0,scale=5,size=1000) # plt.plot() # plot繪制的是折線圖 plt.scatter(x,y) # plt.scatter()繪制的是散點圖
plt.scatter(x,y,s=80,c='red') # s size指的是散點的大小 c color指的是散點的顏色
size = np.random.randint(0,100,1000) color = np.random.random(size=(1000,3)) # 給這1000個點 隨機產生 不同的 大小和顏色 plt.scatter(x,y,s=size,c=color,alpha=0.6,marker='*') plt.axis('off')
餅圖
【餅圖也只有一個參數x!】
pie() 餅圖適合展示各部分占總體的比例,條形圖適合比較各部分的大小
普通各部分占滿餅圖
data = np.array([30,50,24,80]) # 如果各個值 加起來 比1大 就會計算各個部分的百分比 plt.pie(data) plt.axis('equal')
普通未占滿餅圖
data = np.array([0.2,0.4,0.2,0.1]) # 如果比1 小 直接把各個部分的值 作為 百分比 plt.pie(data)
餅圖陰影、分裂等屬性設置
- labels參數設置每一塊的標簽;
- labeldistance參數設置標簽距離圓心的距離(比例值,只能設置一個浮點小數)
- autopct參數設置比例值的顯示格式(%.nf%%);
- pctdistance參數設置比例值文字距離圓心的距離
- explode參數設置每一塊頂點距圓形的長度(比例值,列表);
- colors參數設置每一塊的顏色(列表);
- shadow參數為布爾值,設置是否繪制陰影
- startangle參數設置餅圖起始角度
data = np.array([30,50,24,80]) _ = plt.pie(data ,labels=['china','india','brazil','russa'] # 各個部分的名字(標簽) ,labeldistance=1.1 # 標簽到中心點的距離 ,autopct='%.1f%%' # 控制比例的值的顯示 ,pctdistance=0.5 # 控制百分比的值的顯示位置 ,explode=[0.1,0,0,0] # 每一份扇形 到中心點的距離 ,colors = ['red','green','blue','yellow'] ,shadow=True ,startangle=90 # 繪制圖形時候 開始的角度 )
直方圖
【直方圖的參數只有一個x!!!不像條形圖需要傳入x,y】
hist()的參數
- bins
- 可以是一個bin數量的整數值,也可以是表示bin的一個序列。默認值為10
- density (normed)
- 如果值為True,直方圖的值將進行歸一化處理,形成概率密度,默認值為False
- color
- 指定直方圖顏色。可以是單一色值或顏色序列。如果指定了多個數據集合,顏色序列將會設置為相同的順序。如果未指定,將會使用一個默認的線條顏色
- orientation
- 通過設置orientation為horizontal創建水平直方圖。默認值為vertical
data = np.random.randint(0,100,size=100) df = DataFrame(data) df.plot(kind='hist')
# bins指的是要把整個范圍 分成多少份 默認值是10 # density把值從頻率變成概率 # orientation用來控制條形圖的方向 horizontal表示水平 plt.hist(data,bins=5,density=True,color='r',orientation='horizontal')
條形圖
【條形圖有兩個參數x,y】
- width 水平方向的長度
- height 豎直方向的長度
bar()、barh()
data = np.array([1,4,7,2,8,5]) index = [1,2,3,4,5,6] # x是索引, height是高度(值) plt.bar(x=index,height=data,width=0.5)
# y是各個樣本的索引 # 各個樣本的值的大小 用width來體現 plt.barh(y=index,height=0.5,width=data)
data = np.array([1,2,3,4,5,6]) index = [1,2,3,4,5,6] plt.bar(x=index,height=data,width=0.5)
plt.axes(polar=True) data = np.array([1,2,3,4,5,6]) index = [1,2,3,4,5,7] plt.bar(x=index,height=data,width=0.5)
index = np.arange(0,2*np.pi,np.pi/4) data = [1,2,3,4,5,6,7,8] plt.axes(polar=True) plt.bar(x=index,height=data,width=0.5)
圖形內的文字、注釋、箭頭
控制文字屬性的方法:
所有的方法會返回一個matplotlib.text.Text對象
圖形內的文字
text()
# 以下所有這些 都是文字對象 都可以設置 color rotation fontsize fontproperties ... axes = plt.subplot() plt.title('title') # 畫布標題 實際上 內部調用的 就是axes坐標系的標題 # plt.suptitle('suptitle',color='r',rotation=90,fontsize=10) plt.figtext(0.2,0.8,'fig_text') # 畫布內的文本 x和y參數用來指定位置(0-1之間 不過也可以超出這個范圍) s就是文字的內容 axes.set_title('axes_title') axes.text(0.5,0.5,'axes_text') # x, y, s axes.text(0.8,0.2,'axes_text')
注釋
annotate()
- xy參數設置箭頭指示的位置
- xytext參數設置注釋文字的位置
- arrowprops參數以字典的形式設置箭頭的樣式
- width參數設置箭頭長方形部分的寬度
- headlength參數設置箭頭尖端的長度,
- headwidth參數設置箭頭尖端底部的寬度
- shrink參數設置箭頭頂點、尾部與指示點、注釋文字的距離(比例值),可以理解為控制箭頭的長度
data = np.random.randint(0,10,size=10) index = np.arange(0,10,1) data index
plt.plot(index,data) # s 注釋的內容 # xy 注釋的位置 以列表或者元組的形式 設置x和y的座標(注意 不是0-1的那種值) # plt.annotate('hehe',[5,2]) # 如果想添加 箭頭 可以用 arrowprops來設置箭頭的樣式 # plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'width':2}) # xytext用來設置文本的位置 xy是箭頭指向的位置 # plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'width':2},color='r',rotation=90) # annotation注釋 也是文本對象 也可以設置文本屬性 plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'width':20,'headlength':25,'headwidth':25}) # 設置箭頭的樣式 箭頭身體的寬度width 箭頭頭部的寬度headwidth 長度headlength
plt.plot(index,data) plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'arrowstyle':'fancy'})
3D圖
曲面圖
導包
- from mpl_toolkits.mplot3d.axes3d import Axes3D
使用mershgrid函數切割x,y軸
- X,Y = np.meshgrid(x, y)
創建3d坐標系
- axes = plt.subplot(projection='3d')
繪制3d圖形
- p = axes.plot_surface(X,Y,Z,color='red',cmap='summer') # 返回圖形對象
添加colorbar
- plt.colorbar(p,shrink=0.5) # 傳入圖形對象
from mpl_toolkits.mplot3d.axes3d import Axes3D axes = plt.subplot(projection='3d')
# 取遍 x y 平面上的整數點 x = np.linspace(0,5,6) # 取遍了x軸線上的整數點 x y = np.linspace(0,5,6) y
X,Y = np.meshgrid(x,y)
def fn(x,y): return np.sin(y)-np.cos(x) Z = fn(X,Y) x = np.linspace(-6,6,100) y = np.linspace(-6,6,100) X,Y = np.meshgrid(x,y) # plot_surface繪制平面 plt.figure(figsize=(12,8)) axes = plt.subplot(projection='3d') # axes.plot_surface(X, Y, Z,color='red') p = axes.plot_surface(X, Y, Z,cmap='rainbow') plt.colorbar(p,shrink=0.5)
玫瑰圖/極坐標條形圖
創建極坐標,設置polar屬性
plt.axes(polar = True)
繪制極坐標條形圖
index = np.arange(0,2*np.pi,2*np.pi/8)
plt.bar(x=index ,height = [1,2,3,4,5,6,7,8] ,width = 2*np.pi/8)