1. 程式人生 > >python基礎之資料視覺化matplotlib

python基礎之資料視覺化matplotlib

      資料視覺化圖示的繪製需要安裝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()