一、圖題、圖例、軸標簽的方法
分別是下面三種方法:
- 圖題: plt.title()
- 圖例:plt.legend()
- 軸標簽:plt.xlabel()、plt.ylabel()
使用label參數,為繪制的每條線添加一個標簽,然后使用legend方法展示出來。
plt.plot(x, np.cos(x),'-g',label='cos(x)') plt.plot(x, np.sin(x),':b',label='sin(x)') plt.title('a cos curve') plt.xlabel("X") plt.ylabel("cos(X)") plt.legend()
注:大多數的plt方法都可以直接轉換成ax方法,比如plt.plot()->ax.plot()
,plt.legend()->ax.legend()
。但並不是所有的都可以,比如下面的需要這么轉換:
- plt.xlabel() -> ax.set_xlabel()
- plt.ylabel() -> ax.set_ylabel()
- plt.xlim() -> ax.set_xlim()
- plt.ylim() -> ax.set_ylim()
- plt.title() -> ax.set_title()
在面向對象接口畫圖的時候,不需要單獨調用這些函數,使用ax.set()方法一次性設置即可:
x = np.linspace(0,10,100) ax = plt.axes() ax.plot(x,np.sin(x)) ax.set(xlim=(0,10),ylim=(-2,2),xlabel='x',ylabel='sin(x)',title='a sin plot')
二、圖題的配置
title標題方法,也有許多可以配置的參數:
- fontsize:字體大小,默認12,也可以使用
xx-small....
字符串系列 - fontweight:字體粗細,或者'light'、'normal'、'medium'、'semibold'、'bold'、 'heavy'、'black'。
- fontstyle: 字體類型,或者'normal'、'italic'、'oblique'。
- verticalalignment:垂直對齊方式 ,或者'center'、'top'、'bottom'、'baseline'
- horizontalalignment:水平對齊方式,可選參數:‘left’、‘right’、‘center’
- rotation:旋轉角度
- alpha: 透明度,參數值0至1之間
- backgroundcolor: 背景顏色
- bbox:給標題增加外框 ,常用參數如下:
- boxstyle:方框外形
- facecolor:(簡寫fc)背景顏色
- edgecolor:(簡寫ec)邊框線條顏色
- edgewidth:邊框線條大小
下面是一些使用的例子:
plt.title('A Title',fontsize='large',fontweight='bold') #設置字體大小與尺寸
plt.title('A Title',color='yellow') #設置字體顏色
plt.title('A Title',loc ='left') #設置字體位置
plt.title('A Title',verticalalignment='bottom') #設置垂直對齊方式
plt.title('A Title',rotation=45) #設置字體旋轉角度
plt.title('A Title',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) #設置標題邊框
實際上,title標題方法的大部分參數也適用於xlabel和ylabel坐標軸標簽方法。
三、圖例的配置
legend圖例方法有很多可以配置的參數和選項:
參數 | 說明 |
loc | 圖例的位置 |
prop | 字體參數 |
fontsize | 字體大小 |
markerscale | 圖例標記與原始標記的相對大小 |
markerfirst | 如果為True,則圖例標記位於圖例標簽的左側 |
numpoints | 為線條圖圖例條目創建的標記點數 |
scatterpoints | 為散點圖圖例條目創建的標記點數 |
scatteryoffsets | 為散點圖圖例條目創建的標記的垂直偏移量 |
frameon | 是否顯示圖例邊框 |
fancybox | 邊框四個角是否有弧度 |
shadow | 控制是否在圖例后面畫一個陰影 |
framealpha | 圖例邊框的透明度 |
edgecolor | 邊框顏色 |
facecolor | 背景色 |
ncol | 設置圖例分為n列展示 |
borderpad | 圖例邊框的內邊距 |
labelspacing | 圖例條目之間的垂直間距 |
handlelength | 圖例句柄的長度 |
handleheight | 圖例句柄的高度 |
handletextpad | 圖例句柄和文本之間的間距 |
borderaxespad | 軸與圖例邊框之間的距離 |
columnspacing | 列間距 |
title | 圖例的標題 |
對於loc這個圖例在坐標軸中的放置位置,有兩種表示方法:數字或者字符串,其對應關系如下:
- 0: ‘best' : 自動選擇最適合的位置
- 1: ‘upper right': 右上
- 2: ‘upper left': 左上
- 3: ‘lower left': 左下
- 4: ‘lower right':右下
- 5: ‘right':右
- 6: ‘center left':左中
- 7: ‘center right':右中
- 8: ‘lower center':下中
- 9: ‘upper center': 上中
- 10: ‘center':中間
設置字體大小的參數fontsize可以使用整數或者浮點數,以及字符串‘xx-small’、 ‘x-small’、 ‘small’、‘medium’、 ‘large’、 ‘x-large’和‘xx-large’。
下面是一些使用的例子
plt.legend(loc='best',frameon=False) #去掉圖例邊框
plt.legend(loc='best',edgecolor='blue') #設置圖例邊框顏色
plt.legend(loc='best',facecolor='blue') #設置圖例背景顏色,若無邊框,參數無效
plt.legend(loc='best',title='figure') #去掉圖例邊框
plt.legend(loc='upper left', ncol=2, frameon=False) # 分兩列顯示,在左上角
plt.legend(fancybox=True,framealpha=1, shadow=True, borderpad=1)
默認情況下,圖例會忽略那些不帶標簽的繪圖,只為設置了label參數的繪圖添加圖例。
有時候可能需要在同一張圖上顯示多個圖例。不過,用普通方法解決不了這個問題,標准的legend接口只能為一張圖創建一個圖例。但是可以通過plt.gca().add_artist()
方法(或者ax.add_artist()
),將先前創建過的圖例用底層的接口重新添加上去。
lines = [] styles= ['-', '--','-.',':'] x = np.linspace(0,10,1000) for i in range(4): # 制造四條sin曲線
lines += plt.plot(x, np.cos(x-i*np.pi/2), styles[i]) plt.axis('equal') # 生成第一個圖例,並保存引用
leg = plt.legend(lines[:2], ['line A', 'line B'], loc=1,frameon=False) # 生成第二個圖例,這會讓第一個圖例被抹去
plt.legend(lines[2:], ['line C', 'line D'], loc=4,frameon=False) # gca方法獲取當前坐標軸,再使用它的`add_artist`方法將第一個圖例重新畫上去
plt.gca().add_artist(leg)