python基礎之資料視覺化matplotlib
阿新 • • 發佈:2018-11-19
資料視覺化圖示的繪製需要安裝matplotlib庫,安裝方法:cmd下pip install matplotlib,以及numpy庫,安裝法法:cmd下pip install numpy。使用numpy生產影象繪製需要的資料,如果已經有了資料可以讀取資料到陣列等,再通過import matplotlib.pyplot as plt匯入plt對資料進行繪製等相關操作。
plt中常用引數的含義:ls表示繪製的線的型別,lw(linewidth)表示繪製線的寬度,label這條線的名字,color或者c表示顏色,weight表示字型屬性,alpha表示顏色的濃度,loclabel標籤的位置。簡單的示例如下:
import matplotlib.pyplot as plt import numpy as np #1從0-10中取100個點數 x=np.linspace(0,10,100) y=np.random.rand(100) y1=np.sin(x) # 繪製線 plt.plot(x,y1,ls='-',lw=2,label='plot figure') #繪製點 plt.scatter(x,y,label='scatter figure') #背景網格刻制'-'實線,':'虛線以及其他一下線 plt.grid(linestyle=":",color="r") #註釋文字新增,有指向,通過xy來確定指向位置,xytext確定文字位置 plt.annotate(u"zhushi",xy=(np.pi/4,1.0),xytext=((np.pi/2)+1.0,.8),weight='bold',color='b',arrowprops=dict(arrowstyle='->',connectionstyle='arc3',color='b')) #註釋文字新增,無指向,通過制定x,y的座標來確定顯示位置 plt.text(3.10,0.09,'y=sin(x)',weight='bold',color='b') #繪製水平豎直參考區域 plt.axhspan(ymin=0.0,ymax=0.5,facecolor='y',alpha=0.3) plt.axvspan(xmin=4.0,xmax=6.0,facecolor='y',alpha=0.3) #水平豎直參考線 plt.axhline(y=0.0,c='r',ls='--',lw=2) plt.axvline(x=4.0,c='b',ls='-',lw=2) # 新增標題 plt.title('y=sin(x)') #控制label的顯示的位置 upper right,upper left,lower left,lower right,right,center left,center right,lower center,upper center,center plt.legend(loc='lower right') plt.legend(loc='upper left') #設定xlabel和ylabel的長度 plt.xlim(0,10) plt.ylim(-1,1) #設定座標的標籤文字 plt.xlabel("x") plt.ylabel("y") #顯示繪製的影象 plt.show()
如果直接在plt繪製的相關操作中輸入中文的話,會不能識別,解決方法如下:
import matplotlib as mpl
mpl.rcParams["font.sans-serif"]=["FangSong"]#設定字型
mpl.rcParams["axes.unicode_minus"]=False#座標軸軸線刻度標籤
柱狀圖繪製:
import matplotlib.pyplot as plt import numpy as np x=[1,2,3,4,5,6,7,8] y=[3,1,9,5,8,2,9,10] #繪製柱狀圖 plt.bar(x,y,align='center',color='b',tick_label=['a','b','c','d','e','f','g','h'],hatch='/',alpha=0.5) #柱狀圖旋轉90度後的條形圖 plt.barh(x,y,align='center',color='b',tick_label=['a','b','c','d','e','f','g','h'],hatch='/',alpha=0.5) plt.xlabel("物品") plt.ylabel("數量") plt.show()
在柱狀圖的基礎上實現柱狀圖的堆積和分塊:不同方向的疊加分塊要注意疊加分塊的方向和距離。
#y方向堆積
plt.bar(x,y,align="center",color="b",tick_label=['A','B','C','D'],label="1")
plt.bar(x,y1,align="center",bottom=y,color="r",label="2")
#水平方向分塊
xwidth=0.3
plt.bar(x,y,xwidth,color='c',align='center',label='1',alpha=0.5)
plt.bar(x+xwidth,y1,xwidth,color='b',align='center',label='2',alpha=0.5)
直方圖繪製:
import matplotlib.pyplot as plt
import numpy as np
box=np.random.randint(0,10,100)
plt.hist(box,bins=range(0,11,1),color='g',edgecolor='black',histtype='bar',rwidth=1,alpha=0.5)
plt.xlabel("物品")
plt.ylabel("數量")
plt.show()
餅狀圖繪製:
import matplotlib.pyplot as plt
kinds="A","B","C","D"
colors=["#188eb6","#377eb8","#4daf4a","#984ea3"]
#每一個對應的佔比
soldNums=[0.35,0.1,0.3,0.25]
plt.pie(soldNums,labels=kinds,autopct="%3.1f%%",startangle=0,colors=colors)
plt.show()
極線圖繪製:
import matplotlib.pyplot as plt
import numpy as np
theta=np.linspace(0.0,2*np.pi,12,endpoint=False)
r=30*np.random.rand(12)
plt.polar(theta,r,color="b",lw=2,marker="*",mfc="b",ms=10)
plt.show()
折線圖繪製:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0.5,2*np.pi,20)
y=np.random.randn(20)
plt.stem(x,y,linefmt=":",markerfmt="c",basefmt="-")
plt.show()
誤差圖繪製:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0.1,0.6,6)
y=np.exp(x)
plt.errorbar(x,y,fmt="bo:",xerr=0.02,yerr=0.2)
plt.show()
階梯圖繪製:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(1,10,10)
y=np.sin(x)
plt.step(x,y,color="r",lw=2,where='pre')#where=post,pre,mid
plt.xticks(range(1,11,1))
plt.show()
圖形繪製:
import matplotlib.pyplot as plt
import numpy as np
score1=np.random.randint(0,100,10)
score2=np.random.randint(0,100,10)
x=[score1,score2]
colors=['#8dd3c7','#bebada']
labels=['A','B']
bins=range(0,101,10)
#histtype選擇繪製的圖形, histtype={‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}
#stacked=True位疊加的直方圖,等於False位分塊的直方圖
plt.hist(x,bins=bins,color=colors,histtype='bar',rwidth=10,stacked=True,label=labels)
plt.legend(loc="upper left")
plt.show()