使用Matplotlib畫出線形圖的簡單教程
阿新 • • 發佈:2019-02-14
# import matplotlib.pyplot as plt import numpy as np #ipython 畫圖 %pylab inlineIn [10]:
#簡單線圖 #生成測試資料 x = np.linspace(-1,1,50) y = np.cos(x) #figure建立一個繪圖物件 figsize 圖片大小 plt.figure(figsize=(10,5)) #畫圖 plt.plot(x,y) #預設 #所有繪圖物件 plt.show()
In [51]:
#畫多個子圖 #生成測試資料 x= np.linspace(-3,3,50) y = np.cos(x) y1 = 2*x+1 y2 = np.sin(x) #figure建立一個繪圖物件 figsize 圖片大小 plt.figure(figsize=(10,5)) plt.subplot(221) # 第一行的左圖 plt.plot(x,y) plt.subplot(222) # 第一行的右圖 plt.plot(x,y1) plt.subplot(212) # 第二整行 plt.plot(x,y2) #所有繪圖物件 plt.show()
In [22]:
#顯示標題和X、Y軸的文字和範圍#生成測試資料 x = np.linspace(-1,1,50) y = np.cos(x) #figure建立一個繪圖物件 figsize 圖片大小 plt.figure(figsize=(10,5)) #畫圖 plt.plot(x,y) #預設 plt.xlabel("x label") #X軸的文字 plt.ylabel("y label")#Y軸的文字 plt.title("this is a title") #圖表的標題 plt.xlim(-1.2,1.2) #設定Y軸的範圍 plt.ylim(-1.2,1.2) #設定Y軸的範圍 #所有繪圖物件 plt.show()
In [24]:
#設定X、Y軸座標轉換成字元座標 #生成測試資料 x = np.linspace(-3,3,50) y = np.cos(x) #figure建立一個繪圖物件 figsize 圖片大小 plt.figure(figsize=(10,5)) #畫圖 plt.plot(x,y) #預設 #根據相應座標數 轉換成字元座標 plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], ['$-\pi$', '$-\pi/2$', '$0$', '$\pi/2$','$\pi$']) plt.yticks([-1,0,1],['-one','zero','+one']) #所有繪圖物件 plt.show()
In [12]:
#在同一figure物件中畫多條線圖 #生成測試資料 x = np.linspace(-1,1,50) y = np.cos(x) y2 = np.sin(x) #figure建立一個繪圖物件 figsize 圖片大小 plt.figure(figsize=(10,5)) #畫圖 plt.plot(x,y) #預設 plt.plot(x,y2) #預設 #所有繪圖物件 plt.show()
In [45]:
#帶有圖示的線圖 #生成測試資料 x = np.linspace(-1,1,50) y = np.cos(x) y2 = np.sin(x) #label 在圖示中顯示 color 線的顏色 linewidth線的寬度 linestyle線的樣式 plt.plot(x,y,label='$cos(x)$',color='red',linewidth=1.0,linestyle='--') #前後新增"$"符號 表示數學公式 plt.plot(x,y2,label='$sin(x)$') #顯示圖例 plt.plot()中label和顏色及線型 #legend 的位置引數 best/upper right/upper left/lower left/lower right/right/center left #/center right/lower center/upper center/center plt.legend(loc='best') #所有繪圖物件 plt.show()
In [48]:
#設定X、Y軸的顯示隱藏和移動 字型背景的透明度 #生成測試資料 x = np.linspace(-1,1,50) y = np.cos(x) y2 = np.sin(x) #label 在圖示中顯示 color 線的顏色 linewidth線的寬度 linestyle線的樣式 plt.plot(x,y,label='$cos(x)$',color='red',linewidth=1.0,linestyle='--') #前後新增"$"符號 表示數學公式 plt.plot(x,y2,label='$sin(x)$') #先把右邊和上邊的邊界設定為不可見 ax=plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') #然後把下邊界和左邊界移動到0點 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)) #設定座標軸字型的透明度 ax=plt.gca() for label in ax.get_xticklabels()+ax.get_yticklabels(): label.set_fontsize(12) label.set_bbox(dict(facecolor='blue',edgecolor='none',alpha=0.7)) #facecolor 前面顏色 edgecolor邊框線 alpha透明度 #所有繪圖物件 plt.show()
In [42]:
#給X、Y軸的座標新增標註 #生成測試資料 x = np.linspace(0,np.pi,20) y = np.sin(x) #label 在圖示中顯示 color 線的顏色 linewidth線的寬度 linestyle線的樣式 plt.plot(x,y,label='$cos(x)$',color='red',linewidth=1.0,linestyle='--') #前後新增"$"符號 表示數學公式 #新增標註 x0 = np.pi/2 y0 = np.sin(x0) plt.scatter(x0,y0,color='black') #顯示一個點 plt.plot([x0,x0],[0,y0],'b--') #在點到x軸畫出垂直線 #標註方法1 plt.annotate('y = sin(x)' % y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points', arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=-0.2')) #標註方法2 plt.text(x0+0.1, y0,'this is a sin(x)line') #所有繪圖物件 plt.show()
In [43]:
#全部設定完成 #複雜線形圖 x = np.linspace(-np.pi,np.pi,256,endpoint=True) c,s=np.cos(x),np.sin(x) #這裡`b-`是`color="blue",linestyle="-"`的簡寫 #`lw`=`linewidth` 的簡寫 fig = plt.figure(figsize=(8,6),dpi=80) plt.plot(x, c, 'b-',lw=1.5,label='cosine') plt.plot(x, s, 'r-',lw=1,label='sine') #顯示圖例 plt.plot()中label和顏色及線型 loc設定位置 plt.legend(loc='upper left') #legend 的位置引數 ''' best upper right upper left lower left lower right right center left center right lower center upper center center ''' plt.xlim(-3.2,3.2) #設定Y軸的範圍 plt.xlim(x.min()*1.1, x.max()*1.1) plt.ylim(-1.2,1.2) #設定Y軸的範圍 plt.ylim(c.min()*1.1, s.max()*1.1) #根據相應座標數 轉換成字元座標 plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], ['$-\pi$', '$-\pi/2$', '$0$', '$\pi/2$','$\pi$']) #plt.yticks([-1,0,1],['-one','zero','+one']) #設定座標軸的位置 #先把右邊和上邊的邊界設定為不可見 ax=plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') #然後把下邊界和左邊界移動到0點 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)) #新增標註 x0 = np.pi/2 y0 = np.sin(x0) plt.scatter(x0,y0,color='black') #顯示一個點 plt.plot([x0,x0],[0,y0],'b--') #在點到x軸畫出垂直線 #標註方法1 plt.annotate('y = sin(x)' % y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points', arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=-0.2')) #標註方法2 plt.text(x0+0.1, y0,'this is a sin(x)line') #設定座標軸字型的透明度 ax=plt.gca() for label in ax.get_xticklabels()+ax.get_yticklabels(): label.set_fontsize(12) label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.7)) plt.show()