該講的實例結果如下圖所示:
第01步:導入模塊,並設置顯示中文和負號的屬性;
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif']=['SimHei'] # 用於正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False # 用來正常顯示負號
第02步:創建x軸數據,從-pi到pi平均取256個點;
x = np.linspace(-np.pi,np.pi,256,endpoint=True) #獲取x坐標
第03步:創建y軸數據,根據X的值,求正弦和余弦函數;
sin,cos = np.sin(X),np.cos(X) #獲取y坐標
第04步:繪制正弦、余弦函數圖,並將圖形顯示出來,設置正弦函數曲線的顏色為藍色(blue),線型為實線,線寬為2.5mm;余弦函數曲線的顏色為紅色(red),線型為實線,線寬為2.5mm。顯示結果如下圖所示;
plt.plot(X,sin,"b-",lw=2.5,label="正弦Sin()")
#X:x軸;sin:y軸;b-:color="blue",linestyle="-"的簡寫;lw:linewidth;label:線條的名稱,可用於后面的圖例 plt.plot(X,cos,"r-",lw=2.5,label="余弦Cos()") #cos:y軸;r-:color="red"; plt.show() #顯示圖表
第05步:設置坐標軸的范圍,將x軸、y軸同時拉伸1.5倍,顯示結果如下圖所示;
plt.xlim(X.min()*1.5,X.max()*1.5)
plt.ylim(cos.min()*1.5,cos.max()*1.5)
第06步:設置x軸、y軸的坐標刻度,顯示結果圖下圖所示;
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$']) plt.yticks([-1,0,1])
第07步:為圖表添加標題,標題內容為“繪圖實例之COS()&SIN()”,字體大小設置為16,字體顏色設置為綠色(green);顯示結果如下圖所示;
plt.title("繪圖實例之COS()&SIN()",fontsize=16,color="green")
第08步:在圖表右下角位置添加備注標簽,標簽文本為“By:biyoulin”,文本大小為16,文本顏色為紫色(purple) ,顯示結果如下圖所示;
plt.text(+2.1,-1.4,"By:biyoulin",fontsize=16,color="purple")
第09步:獲取Axes對象,並隱藏右邊界和上邊界;顯示結果如下圖所示;
ax=plt.gca() #獲取Axes對象 ax.spines['right'].set_color('none') #隱藏右邊界 ax.spines['top'].set_color('none') #隱藏上邊界
第10步:將x坐標軸的坐標刻度設置在坐標軸下側,坐標軸平移至經過零點(0,0)的位置,顯示結果如下圖所示;
ax.xaxis.set_ticks_position('bottom') #x軸坐標刻度設置在坐標軸下面 ax.spines['bottom'].set_position(('data',0)) #x軸坐標軸平移至經過零點(0,0)位置
第11步:將y坐標軸的坐標刻度設置在坐標軸左側,坐標軸平移至經過零點(0,0)的位置,顯示結果如下圖所示;
ax.yaxis.set_ticks_position('left') #y軸坐標刻度設置在坐標軸下面 ax.spines['left'].set_position(('data',0)) #y軸坐標軸平移至經過零點(0,0)位置
第12步:添加圖例,圖例位置為左上角,圖例文字大小為12,顯示結果如下圖所示;
plt.legend(loc="upper left",fontsize=12)
第13步:在正弦函數曲線上找出x=(2π/3)的位置,並作出與x軸垂直的虛線,線條顏色為藍色(blue),線寬設置為1.5mm;在余弦函數曲線上找出x=-π的位置,並作出與x軸垂直的虛線,線條顏色為紅色(red),線寬設置為1.5mm;顯示結果如下圖所示;
t1 = 2*np.pi/3 #設定第一個點的x軸值 t2 = -np.pi #設定第二個點的x軸值 plt.plot([t1,t1],[0,np.sin(t1)],color ='b',linewidth=1.5,linestyle="--") #第一個列表是x軸坐標值,第二個列表是y軸坐標值 #這兩個點坐標分別為(t1,0)和(t1,np.sin(t1)),根據兩點畫直線 plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--") #這兩個點坐標分別為(t2,0)和(t2,np.cos(t2)),根據兩點畫直線
第14步:用繪制散點圖的方法在正弦,余弦函數上標注這兩個點的位置,設置點大小為50,設置相應的點顏色;
plt.scatter([t1,],[np.sin(t1),], 50, color ='b') plt.scatter([t2,],[np.cos(t2),], 50, color ='r')
第15步:為圖表添加注釋;顯示結果如下圖所示;
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', xy=(t1,np.sin(t1)), #點的位置 xycoords='data', #注釋文字的偏移量 xytext=(+10,+30), #文字離點的橫縱距離 textcoords='offset points', fontsize=14, #注釋的大小 arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2")) #箭頭指向的彎曲度 plt.annotate(r'$\cos(-\pi)=-1$', xy=(t2,np.cos(t2)), #點的位置 xycoords='data', #注釋文字的偏移量 xytext=(0,-40), #文字離點的橫縱距離 textcoords='offset points', fontsize=14, #注釋的大小 arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2")) #箭頭指向的彎曲度
第16步:獲取x,y軸的刻度,並設置字體;
for label in ax.get_xticklabels()+ax.get_yticklabels(): #獲取刻度 label.set_fontsize(18) #設置刻度字體大小
使用".set_bbox"還可以給刻度文本添加邊框,如果給全局文本添加邊框,可以將此放在循環里,如果對單個刻度文本進行設置,可以放在循環外部;
for label in ax.get_xticklabels()+ax.get_yticklabels(): #獲取刻度 label.set_fontsize(18) #設置刻度字體大小 label.set_bbox(dict(facecolor='r',edgecolor='g',alpha=0.5)) #set_bbox為刻度添加邊框 #facecolor:背景填充顏色 #edgecolor:邊框顏色 #alpha:透明度
第17步:繪制填充區域;
plt.fill_between(X,np.abs(X)<0.5,sin,sin>0.5,color='g',alpha=0.8) #設置正弦函數的填充區域,顏色為綠色(green),其中的一種方式 plt.fill_between(X,cos,where=(-2.5<X)&(X<-0.5),color='purple') #設置余弦函數的填充區域,顏色為紫色(purple),另外一種方式
第18步:繪制網格線;
plt.grid()
第19步:保存圖表,保存為“COS&SIN.PNG”,dpi設置為300;
plt.savefig("C:\\繪圖實例之COS()&SIN().PNG",dpi=300)
繪制完成!!

#!/usr/bin/env python #!-*-coding:utf-8 -*- #!@Author : Biyoulin #!@Time : 2018/9/1 14:17 import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif']=['SimHei'] # 用於正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False # 用來正常顯示負號 X = np.linspace(-np.pi,np.pi,256,endpoint=True) #獲取x坐標 sin,cos = np.sin(X),np.cos(X) #獲取y坐標 plt.plot(X,sin,"b-",lw=2.5,label="正弦Sin()") #X:x軸;sin:y軸;b-:color="blue",linestyle="-"的簡寫;lw:linewidth plt.plot(X,cos,"r-",lw=2.5,label="余弦Cos()") plt.xlim(X.min()*1.5,X.max()*1.5) plt.ylim(cos.min()*1.5,cos.max()*1.5) plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$']) plt.yticks([-1,0,1]) plt.title("繪圖實例之COS()&SIN()",fontsize=16,color="green") plt.text(+2.1,-1.4,"By:biyoulin",fontsize=16,color="purple") ax=plt.gca() #獲取Axes對象 ax.spines['right'].set_color('none') #隱藏右邊界 ax.spines['top'].set_color('none') #隱藏上邊界 ax.xaxis.set_ticks_position('bottom') #x軸坐標刻度設置在坐標軸下面 ax.spines['bottom'].set_position(('data',0)) #x軸坐標軸平移至經過零點(0,0)位置 ax.yaxis.set_ticks_position('left') #y軸坐標刻度設置在坐標軸下面 ax.spines['left'].set_position(('data',0)) #y軸坐標軸平移至經過零點(0,0)位置 plt.legend(loc="upper left",fontsize=12) t1 = 2*np.pi/3 #設定第一個點的x軸值 t2 = -np.pi #設定第二個點的x軸值 plt.plot([t1,t1],[0,np.sin(t1)],color ='b',linewidth=1.5,linestyle="--") #第一個列表是x軸坐標值,第二個列表是y軸坐標值 #這兩個點坐標分別為(t1,0)和(t1,np.sin(t1)),根據兩點畫直線l1 plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--") #這兩個點坐標分別為(t2,0)和(t2,np.cos(t2)),根據兩點畫直線l2 plt.scatter([t1,],[np.sin(t1),], 50, color ='b') plt.scatter([t2,],[np.cos(t2),], 50, color ='r') plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', xy=(t1,np.sin(t1)), #點的位置 xycoords='data', #注釋文字的偏移量 xytext=(+10,+30), #文字離點的橫縱距離 textcoords='offset points', fontsize=14, #注釋的大小 arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2")) #箭頭指向的彎曲度 plt.annotate(r'$\cos(-\pi)=-1$', xy=(t2,np.cos(t2)), #點的位置 xycoords='data', #注釋文字的偏移量 xytext=(0,-40), #文字離點的橫縱距離 textcoords='offset points', fontsize=14, #注釋的大小 arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2")) #箭頭指向的彎曲度 for label in ax.get_xticklabels()+ax.get_yticklabels(): #獲取刻度 label.set_fontsize(18) #設置刻度字體大小 # label.set_bbox(dict(facecolor='r',edgecolor='g',alpha=0.5)) #set_bbox為刻度添加邊框 #facecolor:背景填充顏色 #edgecolor:邊框顏色 #alpha:透明度 plt.fill_between(X,np.abs(X)<0.5,sin,sin>0.5,color='g',alpha=0.8) #設置正弦函數的填充區域,其中的一種方式 plt.fill_between(X,cos,where=(-2.5<X)&(X<-0.5),color='purple') #設置余弦函數的填充區域,另外一種方式 plt.grid() plt.savefig("C:\\繪圖實例之COS()&SIN().PNG",dpi=300) plt.show() #顯示圖表
參考博文:https://blog.csdn.net/MESSI_JAMES/article/details/80819144
作者:biyoulin
出處:http://www.cnblogs.com/biyoulin/
版權聲明:本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。