国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python繪制正余弦函數圖像的方法

2020-01-04 14:37:54
字體:
來源:轉載
供稿:網友

今天打算通過繪制正弦和余弦函數,從默認的設置開始,一步一步地調整改進,讓它變得好看,變成我們初高中學習過的圖象那樣。通過這個過程來學習如何進行對圖表的一些元素的進行調整。

01. 簡單繪圖

matplotlib有一套允許定制各種屬性的默認設置。你可以幾乎控制matplotlib中的每一個默認屬性:圖像大小,每英寸點數,線寬,色彩和樣式,子圖(axes),坐標軸和網格屬性,文字和字體屬性,等等。

安裝

pip install matplotlib 

雖然matplotlib的默認設置在大多數情況下相當好,你卻可能想要在一些特別的情形下更改一些屬性。

from pylab import *x = np.linspace(-np.pi, np.pi, 256,endpoint=True)C,S = np.cos(x), np.sin(x)plot(x,C)plot(x,S)show()

show image

Python,正余弦函數,圖像

02. 設置基本元素

這邊的基本元素主要有幾下幾點:

線的顏色,粗細,和線型 刻度和標簽 還有圖例

代碼比較簡單,基本上在我的第一講內容里都講過了。

import numpy as npfrom matplotlib import pyplot as pltplt.figure(figsize=(10,6), dpi=80)x = np.linspace(-np.pi, np.pi, 256,endpoint=True)C,S = np.cos(x), np.sin(x)# 設置線的顏色,粗細,和線型plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label=r'$sin(x)$')plt.plot(x, S, color="red", linewidth=2.5, linestyle="-", label=r'$cos(x)$')# 如果覺得線條離邊界太近了,可以加大距離plt.xlim(x.min()*1.2, x.max()*1.2)plt.ylim(C.min()*1.2, C.max()*1.2)# 當前的刻度并不清晰,需要重新設定,并加上更直觀的標簽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],   [r'$-1$', r'$0$', r'$1$'])# 添加圖例plt.legend()plt.show()

show image

Python,正余弦函數,圖像

03. 移動軸線

還記得我們在初高中學習的三角函數圖象,可不是這樣,它應該是有四個象限的。而這里卻是一個四四方方的圖表。

所以接下來,我們要做的就是移動軸線,讓它變成我們熟悉的樣子。

我們只需要兩軸線(x和y軸),所以我們需要將頂部和右邊的軸線給隱藏起來(顏色設置為None即可)。

# plt.gca(),全稱是get current axisax = plt.gca()ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')# 由于我們移動的是左邊和底部的軸,所以不用設置這兩個也可以ax.xaxis.set_ticks_position('bottom')ax.yaxis.set_ticks_position('left')# 指定data類型,就是移動到指定數值ax.spines['bottom'].set_position(('data',0))ax.spines['left'].set_position(('data',0))

關于 set_position() 這個函數中的data是啥意思?我查了下官網。解釋如下

Python,正余弦函數,圖像

然后最后發現,上面的寫法可以用一定更簡潔的方式設置,是等價的。

ax.spines['bottom'].set_position('zero')ax.spines['left'].set_position('zero')

show image

Python,正余弦函數,圖像

04. 添加注釋

現在的圖形部分已經成型,接下讓我們現在使用annotate命令注解一些我們感興趣的點。

我們選擇 2π/3 作為我們想要注解的正弦和余弦值。我們將在曲線上做一個標記和一個垂直的虛線。然后,使用annotate命令來顯示一個箭頭和一些文本。

t = 2*np.pi/3# 利用plt.plot繪制向下的一條垂直的線,利用plt.scatter繪制一個點。plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")plt.scatter([t,],[np.cos(t),], 50, color ='blue')plt.annotate(r'$sin(/frac{2/pi}{3})=/frac{/sqrt{3}}{2}$',   xy=(t, np.sin(t)), xycoords='data',   xytext=(+10, +30), textcoords='offset points', fontsize=16,   arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))# 利用plt.plot繪制向上的一條垂直的線,利用plt.scatter繪制一個點。plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")plt.scatter([t,],[np.sin(t),], 50, color ='red')plt.annotate(r'$cos(/frac{2/pi}{3})=-/frac{1}{2}$',   xy=(t, np.cos(t)), xycoords='data',   xytext=(-90, -50), textcoords='offset points', fontsize=16,   arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

在這里,你可能會對 plt.annotate 這個函數的用法,有所陌生。這里也解釋一下。

第一個參數,就是注釋內容; 第二個參數, xy ,就是對哪一點進行注釋; 第三個參數, xycoords ,指定類型,data 是說基于數值來定位; 第四個參數, xytext ,是注釋的位置,結合第五個參數,就是根據偏移量來決定注釋位置; 第五個參數, textcoords ,值為offset points,就是說是相對位置; 第六個參數, fontsize ,注釋大??; 第七個參數, arrowprops ,對箭頭的類型的一些設置。

show image

Python,正余弦函數,圖像

05. 完整代碼

以上都是對片段代碼進行解釋,這里放出完整的代碼

import numpy as npfrom matplotlib import pyplot as pltplt.figure(figsize=(10,6), dpi=80)x = np.linspace(-np.pi, np.pi, 256,endpoint=True)C,S = np.cos(x), np.sin(x)# 設置線的顏色,粗細,和線型plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label=r'$sin(x)$')plt.plot(x, S, color="red", linewidth=2.5, linestyle="-", label=r'$cos(x)$')# 如果覺得線條離邊界太近了,可以加大距離plt.xlim(x.min()*1.2, x.max()*1.2)plt.ylim(C.min()*1.2, C.max()*1.2)# 當前的刻度并不清晰,需要重新設定,并加上更直觀的標簽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,1],   [r'$-1$', r'$1$'])# 添加圖例plt.legend(loc='upper left')# plt.gca(),全稱是get current axisax = plt.gca()ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')# 由于我們移動的是左邊和底部的軸,所以不用設置這兩個也可以ax.xaxis.set_ticks_position('bottom')ax.yaxis.set_ticks_position('left')# 指定data類型,就是移動到指定數值# ax.spines['bottom'].set_position('zero')ax.spines['bottom'].set_position(('data',0))ax.spines['left'].set_position(('data',0))t = 2*np.pi/3# 利用plt.plot繪制向下的一條垂直的線,利用plt.scatter繪制一個點。plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")plt.scatter([t,],[np.cos(t),], 50, color ='blue')plt.annotate(r'$sin(/frac{2/pi}{3})=/frac{/sqrt{3}}{2}$',   xy=(t, np.sin(t)), xycoords='data',   xytext=(+10, +30), textcoords='offset points', fontsize=16,   arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))# 利用plt.plot繪制向上的一條垂直的線,利用plt.scatter繪制一個點。plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")plt.scatter([t,],[np.sin(t),], 50, color ='red')plt.annotate(r'$cos(/frac{2/pi}{3})=-/frac{1}{2}$',   xy=(t, np.cos(t)), xycoords='data',   xytext=(-90, -50), textcoords='offset points', fontsize=16,   arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))plt.show()

繪制拋物線:

X1=np.linspace(-4,4,100,endpoint=True)plt.plot(X1,(X1**2)/9)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祁东县| 米林县| 金华市| 徐闻县| 盐源县| 蒙自县| 马山县| 郧西县| 巴塘县| 新宁县| 绥棱县| 南平市| 庆阳市| 张掖市| 夹江县| 邵东县| 乳源| 贞丰县| 桃源县| 德清县| 无极县| 涟源市| 克拉玛依市| 永登县| 齐河县| 武威市| 屯留县| 怀安县| 巴林左旗| 临沧市| 闽侯县| 华蓥市| 安阳县| 鹤山市| 庄河市| 兴文县| 古丈县| 宜昌市| 上思县| 邛崃市| 大姚县|