1. 程式人生 > 程式設計 >Python Matplotlib繪圖基礎知識程式碼解析

Python Matplotlib繪圖基礎知識程式碼解析

1.Figure和Subplot

import numpy as np
import matplotlib.pyplot as plt
#建立一個Figure
fig = plt.figure()
#不能通過空figure繪圖,必須使用add_subplot建立一個或多個subplot
#影象為2x2,第三個引數為當前選中的第幾個
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2)
ax3 = fig.add_subplot(2,3)
#預設在最後一個subplot上繪製
#'k--'為線型選項,繪製黑色虛線
plt.plot(np.random.randn(50).cumsum(),'k--')
print(type(ax1))#<class 'matplotlib.axes._subplots.AxesSubplot'>
#直接呼叫它們的例項方法就可以在其他格子繪圖
_ = ax1.hist(np.random.randn(100),bins=20,color='k',alpha=0.3)
ax2.scatter(np.arange(30),np.arange(30) + 3 * np.random.randn(30))
plt.show()
fig,axes = plt.subplots(2,sharex=True,sharey=True)#建立一個新的Figure,並返回一個已建立subplot物件的NumPy陣列
#可以索引axes[0,1],axes[0][1]

'''
plt.subplots的選項 
nrows:subplot的行數
ncols:subplot的列數
sharex:所有subplot應該使用相同的x軸刻度(調節xlim將會影響所有subplot)
sharey:所有subplot應該使用相同的y軸刻度(調節ylim將會影響所有subplot)
subplot_kw:用於建立各subplot的關鍵字字典
**fig_kw:建立figure時其他關鍵字,如plt.subplots(2,figsize=(8,6))
'''
for i in range(2):
	for j in range(2):
		axes[i,j].hist(np.random.randn(500),bins=50,alpha=0.5)
#調整subplot周圍間距
#plt.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None)
plt.subplots_adjust(wspace=0,hspace=0)
plt.show()

2.顏色、標記和線型

#ax.plot(x,y,'g--')
#ax.plot(x,linestyle='--',color='g')
#plt.plot(np.random.randn(30).cumsum(),'ko--')
#plt.plot(np.random.randn(30).cumsum(),linestyle='dashed',marker='o')
#線型圖中,非實際資料點預設是按線性方式插值的,可以通過drawstyle選項修改
data = np.random.randn(30).cumsum()
plt.plot(data,'k--',label='Defalt')
plt.plot(data,'k-',drawstyle='steps-post',label='steps-post')
plt.legend(loc='best')

3.刻度、標籤和圖例

xlim,xticks,xticklabels之類的方法。它們分別控制圖表的範圍、刻度位置、刻度標籤等。

其使用方式有以下兩種:

  • 呼叫時不帶引數,則返回當前引數值。plt.xlim()
  • 呼叫時帶引數,則設定引數值。plt.xlim([0,10])

這些方法對當前或最近建立的AxesSubplot起作用

對應在subplot物件上的兩個方法,如ax.get_xlim和ax.set_xlim

3.1.設定標題、軸標籤、刻度以及刻度標籤

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(np.random.randn(1000).cumsum())
#改變X軸的刻度,最簡單的方法是使用set_xticks和set_xticklabels。
#前者告訴刻度放在資料範圍中的哪些位置,預設情況下,這些位置是刻度標籤,可以用set_xticklabels設定。
a=ax.set_xticks([0,250,500,750,1000])
b=ax.set_xticklabels(['one','two','three','four','five'],rotation=30,fontsize='small')
ax.set_xlabel('Stages')
plt.show()

3.2.新增圖例(legend)、註解以及在Subplot上繪圖

兩種方式,最簡單的是在新增subplot的時候傳入label引數

fig = plt.figure()
ax = fig.add_subplot(1,1)

ax.plot(np.random.randn(1000).cumsum(),'k',label='one')
ax.plot(np.random.randn(1000).cumsum(),label='two')
ax.plot(np.random.randn(1000).cumsum(),'k.',label='three')

ax.legend(loc='best')
#loc表示將圖例放在哪
#從圖例中去除一個或多個元素,不傳入label或label='_nolegend_'即可

#註解以及在Subplot上繪圖
#註解可以通過text,arrow和annotate等函式進行新增。
#text可以將文字繪製在圖示的指定座標(x,y),還可以加上一些自定義格式
#ax.text(x,'Hello world!',family='monosapce',fontsize=10)

plt.show()

3.3.將圖表儲存到檔案

plt.savefig('filepath.svg')
plt.savefig('filepath.svg',dpi=400,bbox_inches='tight')

Figure.savefig引數

  • fname:路徑,包含設定檔案格式(如.pdf等)
  • dpi:影象解析度,預設100
  • facecolor、edgecolor:影象背景色,預設為'w'(白色)
  • format:顯示設定檔案格式
  • bbox_inches:影象需要儲存的部分。'tight',將嘗試剪除影象周圍的空白部分

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。