python cookbook 中文第四版_Python Cookbook (4)
1. 導(dǎo)入庫:import matplotlib.pyplot as plt
2. 傳入數(shù)據(jù):比如plt.plot([y1,y2...]),此時只傳入了一個數(shù)組,那么庫會假定傳入的是圖表的y值,于是將其跟一個序列的x值對應(yīng)起來,x取值為0、1、2、...
又比如plt.plot([x1,x2...],[y1,y2...]),此時傳入的是兩個數(shù)組,第一個數(shù)組為x軸上各數(shù)值,第二個數(shù)組為y軸上各數(shù)值
其實,[x1,x2...]和[y1,y2...]就是NumPy數(shù)組,可以直接把NumPy數(shù)組作為輸入數(shù)據(jù),同時數(shù)組經(jīng)過pandas處理后也無需進一步處理,比如plt.plot(t,y1)
3. 繪制圖表:plt.show()
此外還可以繪制子圖,用subplot()函數(shù)先進行區(qū)域設(shè)置,其中參數(shù)由3個連續(xù)整數(shù)組成,分別表示垂直方向、水平方向被分成幾部分以及可以直接用命令控制的子圖
# 比如要分成上下兩個子圖,則先plt.subplot(211)然后繪制第一個,接著plt.subplot(212)然后繪制第二個
# 再比如要分成左右兩個子圖,則先plt.subplot(121)然后繪制第一個,接著plt.subplot(122)然后繪制第二個
4. 修飾圖表元素:
(1) 帶顏色的數(shù)據(jù)點:比如'ro'紅色圓點,'b*'藍(lán)色星星點,'g^'綠色正三角點,'ys'黃色正方形點等等,就是'顏色+形狀'做參數(shù)加到plt.plot()里頭去就行了
# 注意默認(rèn)的是實線,如果用了這個參數(shù),圖表里面就沒實線了,全是點。對于顏色,還有:'c'藍(lán)綠色、'm'洋紅、'k'黑色、'w'白色
(2) 帶顏色的其他線型:比如'b--'是藍(lán)色虛線,'r-.'紅色點線等等
(3) 改變線條粗細(xì):增加參數(shù)linewidth,比如設(shè)置linewidth=2.0
(4) axis():定義x軸和y軸的取值范圍,plt.axis([xmin,xmax,ymin,ymax]) # 一般提前進行的,比如不合理的軸取值可能會讓數(shù)據(jù)點在邊緣
(5) title():為圖表增加標(biāo)題,plt.plot('My first plot')
(6) xlabel()和ylabel():添加軸標(biāo)簽
# 對于(4)~(6),還可以參加參數(shù)來修改文本屬性,比如fontsize=20、fontname='Times New Roman'、color='gray'
(7) text():為各個數(shù)據(jù)點添加標(biāo)簽,它有四個參數(shù)text(x,y,s,fontdict=None,**kwargs),其中x,y,s表示三維坐標(biāo)點,如果兩維則x,y即可,fontdict為文本要使用的字體,**kwargs為要添加的標(biāo)簽
比如plt.text(1,1.5,'First')則為數(shù)據(jù)點(1,1.5)添加了字符串標(biāo)簽First,fontdict參數(shù)如果沒特別要求可以不管
此外,text()中還能支持latex表達(dá)式,即**kwargs處添加r'$y=x^2$',注意3點,一是用r開頭,二是用''引用,三是用$$界定公式范圍
(8) grid():添加網(wǎng)格,用plt.grid(True)即可
(9) legend():添加圖例,比如:plt.plot([1,2],[2,3],'ro') plt.plot([2,3],[1,2],'b*') plt.legend(['First series','Second series'])
意思就是分別給'ro'和'b*'兩個數(shù)據(jù)集添加圖例(圖例實際上就是在圖標(biāo)里弄個小框標(biāo)注哪些線或點表示什么意思)
legend()函數(shù)默認(rèn)為1,即右上角添加,還可以添加關(guān)鍵字參數(shù)loc來指定,loc取值從0~10分別表示最佳位置、右上角、左上角、右下角、左下角、右側(cè)、左側(cè)垂直居中、右側(cè)垂直居中、下方水平居中、上方水平居中、正中間
5. 保存圖片:plt.savefig('圖片名.png') # 切記在最后一行使用
6. 處理日期值:如果讓matplotlib自動管理可讀,會在時間軸(x軸)出現(xiàn)不清晰,很混亂,所以要人為設(shè)置時間格式
有set_major_locator()、set_minor_locator()、set_major_formatter()等函數(shù),需要的時候網(wǎng)上copy一段代碼即可,這波操作有代碼片段滴!
7. 畫線形圖:
(1) 繪制由數(shù)學(xué)函數(shù)生成的數(shù)據(jù)點:比如x=np.arange(-2*np.pi,2*np.pi,0.01) y=np.sin(3*x)/x,還是得先單獨指定x范圍
# 注意上面這個例子,x的范圍是-2pi~2pi,但刻度標(biāo)簽?zāi)J(rèn)使用數(shù)值形式,如果要用pi的倍數(shù)代替數(shù)值,則以下代碼操作一波
# plt.xticks([-2*np.pi,-np.pi,0,np.pi,2*np.pi],[r'$-2\pi$',r'$-np.pi$',r'$0$',r'$+\pi$',r'$+2\pi$']),格式就是兩個列表,后面那個用latex表達(dá)式,且套上獨有的界定符
# 如果要修改縱軸,使用yticks()函數(shù)即可
(2) 繪制一系列數(shù)據(jù)點:需要創(chuàng)建兩個NumPy數(shù)組,一個包含x值,另一個包含每個x值所對應(yīng)的y值
(3) 讓x,y軸穿過(0,0)的方法:(下面實際是一大段代碼,沒咋看懂...)
ax=plt.gca() ax=spines['right'].set_color('none') ax=spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',0))
(4) 注釋+箭頭標(biāo)明曲線上某一數(shù)據(jù)點:
plt.annotate(r'&Latex表達(dá)式&'或'字符串',xy=[注釋數(shù)據(jù)點的x坐標(biāo),注釋數(shù)據(jù)點的y坐標(biāo)],xycoords='data',xytext=[30,30],fontsize=16,textcoords='offset points',arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
# 參數(shù)比較繁瑣,最后的效果就是這個表達(dá)式或字符串伸個箭頭指向要曲線上要注釋的這個數(shù)據(jù)點的位置
(5) 為DataFrame繪制線形圖:直接一個plot(),就按每個索引同時呈現(xiàn)多條曲線的,再來個legend()函數(shù),則會以索引名為圖例名添加相應(yīng)個圖例
8. 畫直方圖:hist()函數(shù),比如:n,bins,patches=plt.hist(pop,bins=20)
# 其中pop是數(shù)據(jù),pop=np.random.randint(0,100,100),bins參數(shù)指定了將樣本個體分到多少個面元中,如果未指定,則默認(rèn)為10個面元
# hist()函數(shù)除了以圖表形式表示外,還能以元組形式返回,也就是上面的n,bins,patches,返回成(n,bins,patches)
9. 畫條狀圖:
(1) 一般條狀圖:
(a) 垂直:bar()函數(shù),如plt.bar(index,values),其中index和values是指定的兩個列表,分別作為圖表中的x軸和y軸的值,各x值顯示在每個條形塊的左下角
plt.xticks(index+0.4,['A','B','C','D','E']),讓x值顯示從左下角到居中,并將x顯示值換成A到E,即標(biāo)簽
增加誤差線元素:plt.bar(index,values,yerr=std1,error_kw={'ecolor':'0.1','capsize':6},alpha=0.7,label='First')
其中ecolor指定誤差線的顏色,capsize指定誤差線兩頭橫線的寬度,alpha取值為0~1,0表示對象完全透明
(b) 水平:barh()函數(shù),其用法和bar()類似,但需要注意的是,水平條狀圖中,類別分布在y軸,數(shù)值顯示在x軸
(2) 多序列條狀圖:
(a) 需要多少個序列共用一個類別,則把每個類別占據(jù)的空間分為多少個部分即可
比如默認(rèn)每個類別空間寬度為1:bw=0.3 plt.bar(index,values1,bw,color='b') plt.bar(index+bw,values2,bw,color='g') plt.bar(index+2*bw,values3,bw,color='r')就ok了
接著上述例子,同樣可以plt.xticks(index+1.5*bw,['A','B','C','D','E']),index后面加上的增量要講究以下
如果要生成水平方向的,用barh()即可,參數(shù)用法等一樣噠
(b) 為DataFrame繪制多序列條狀圖:可以快速完成,實現(xiàn)自動化,df.plot(kind='bar')就ok了,其中df=pd.DataFrame(data),做好的圖自動添加圖例
同樣,水平則kind='barh'即可,美滋滋!
(3) 多序列堆積條狀圖: # 比如想表示總和是由幾個條狀圖相加得到的,就用它啦!
(a) s1,s2,s3是三個numpy序列,則plt.bar(index,s1,color='r') plt.bar(index,s2,color='b',bottom=s1) plt.bar(index,s3,color='g',bottom=(s2+s1)) 就OK了,關(guān)鍵就是在bottom參數(shù)
水平的殊途同歸,bar()換成barh()就OK了 # 同時應(yīng)當(dāng)注意,水平的“x軸”相應(yīng)變到了y上,所以原本的xticks()也要換成yticks()
(b) 為DataFrame繪制堆積條狀圖:df.plot(kind='bar',stacked=True)即可,df是DataFrame對象
(4) 其他條狀圖:
(a) 前面都是用顏色填充,實際上還可以用不同陰影填充,先把條狀圖顏色設(shè)置成白色,然后用hatch關(guān)鍵字參數(shù)指定影線的類型
不同影線用不同的字符(|、/、-、\、*)表示,且同一符號出現(xiàn)的次數(shù)越多,則形成的陰影的線條越密集,比如///就比//密集
(b) 兩列有著共同類別的數(shù)據(jù),其條狀圖分列于x軸兩側(cè),分別向+y和-y生長,比如以下這段代碼:
plt.ylim(-7,7)
plt.bar(x0,y1,0.9,facecolor='r',edgecolor='w')
plt.bar(x0,-y2,0.9,facecolor='b',edgecolor='w')
plt.xticks(())
plt.grid(True)
for x,y in zip(x0,y1):plt.text(x+0.4,y+0.05,'%d'%y,ha='center',va='bottom')
for x,y in zip(x0,y2):plt.text(x+0.4,-y-0.05,'%d'%y,ha='center',va='top')
# 其中 x0,y1,y2分別是np數(shù)組。這段code先記下,來日方長
10. 畫餅圖:
(1) labels=['A','B','C'] values=[1.2.3] colors=['yellow','green','red']
plt.pie(values,labels=labels,colors=colors)
plt.axis('equal') # 為了繪制標(biāo)準(zhǔn)的圓形圖餅,還需要在代碼最后調(diào)用axis()函數(shù)
同時還可以添加很多參數(shù),explode表示某塊是否突出,其取值為0~1,0表示沒有抽取;startangle用來調(diào)整餅圖的旋轉(zhuǎn)角度,取值為0~360;
autopct在每一塊的中間位置添加文本標(biāo)簽來顯示百分比;shadow用來添加陰影效果,設(shè)置為True即可
這樣一來:plt.pie(values,labels=labels,colors=colors,explode=explode,shadow=True,autopct='%1.1f%%',startangle=180),其中explode=[0.3,0,0]
(2) 為DataFrame繪制餅圖:df['s1'].plot(kind='pie',figsize=(6,6)),其中為了繪制一個標(biāo)準(zhǔn)的圓形餅圖就有必要添加figsize關(guān)鍵字,df['s1']則只講DataFrame對象中的s1序列做成圖
11. 畫等值線圖:
X,Y=np.meshgrid(x,y)
def f(x,y):return (1-y**5+x**5)*np.exp(-x**2-y**2)
C=plt.contour(X,Y,f(X,Y),8,colors='black') # 用contour()函數(shù)生成三維結(jié)構(gòu)表面的等值線圖
plt.contourf(X,Y,F(X,Y),8)
plt.clabel(C,inline=1,fontsize=10)
plt.colorbar() # 增加圖例作為對圖表中所有顏色的說明
12. 畫極區(qū)圖: # 可以將其視作兼有餅圖和條狀圖特點的圖表
theta=np.arange(0.,2*np.pi,2*np.pi/N) # 這里是平均分配的,實際上可以按照它們所占比例來分配角度,就和餅圖一樣,所以說它兼顧了餅圖的特征
radii=np.array([4,7,5,3,1,5,6,7]) # 這里體現(xiàn)了極區(qū)圖兼顧條狀圖的特點
plt.axes([0.025,0.025,0.95,0.95],polar=True)
colors=np.array(懶得敲代碼了)
bars=plt.bar(theta,radii,width=(2*np.pi/N),bottom=0.0,color=colors) # 使用bar函數(shù),然后注意各個參數(shù)
總結(jié)
以上是生活随笔為你收集整理的python cookbook 中文第四版_Python Cookbook (4)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js富文本编辑器_自制富文本编辑器
- 下一篇: python多进程关闭socket_用P