matplotlib 繪圖實例01:正弦余弦曲線


該講的實例結果如下圖所示:    

第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/

版權聲明:本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM