Python 绘图库 Matplotlib
Matplotlib 庫是 Python 中用來繪制圖片的一個包,它和其他的一些庫結合起來使用可以快速繪制出想要的圖像,在數據處理分析以及其他的過程中提供很大的便利
目錄
1. 安裝配置
2. 快速入門
(1)畫布
(2)子圖與子圖布局
subplot()
subplots()
(3)坐標軸和刻度的名稱
坐標軸名稱
?? 坐標軸范圍
(4)圖例和文本標注
圖例
?? 文本標注(中文&英文)
3. 圖形繪制
(1)曲線圖
(2)散點圖
(3)直方圖
(4)餅圖
(5)極坐標繪圖
創建簡單的極坐標軸
極坐標軸中的一些參數設置
極坐標繪制雷達圖
4. 風格和樣式
(1)畫布設置
plt.style.use(bmp)
?plt.style.use('calssic')
??plt.style.use('dark_background')
(2)子圖布局
plt.axes:手繪子圖
? plt.subplots()
plt.Gridspec()
(3)顏色
主題配色
其他顏色設置
(4)線條和點的樣式
線條樣式
點的樣式
(5)坐標軸
設置范圍
控制交叉點的位置
在坐標軸上添加箭頭
(6)刻度
(7)文本
(8)圖例
(9)網格設置
對于特定方向的設定(axis)
顏色的設定(color)
線條風格(linestyle)
結束語
1. 安裝配置
打開 Pycharm --> 點擊 File
?
點擊 Settings --> 點擊 Project Interpreter
?
?點擊 + 號進行搜索安裝即可
?
2. 快速入門
(1)畫布
函數:在 matplotlib 庫中可以使用 figure(num =, figsize =, dpi = , facecolor = , edgecolor = , frameon = )
參數:
- num:用于對畫布進行唯一標號。可以輸入一個整數或字符串。
- figsize:輸入一個倆元素元組,定義畫布的長寬。默認(6.4,4.8)。
- dpi:圖像分辨率,默認值為100。
- facecolor:背景顏色。默認為:rc:figre.facecolor‘=’w‘
- edgecolor:邊框顏色。如果未提供,默認為:rc:figre.edgecolor‘=’w‘
- frameon:圖形框架的顯示
此處參考文章:Matplotlib(2)——創建畫布
如:
import matplotlib.pyplot as plt fig1 = plt.figure(figsize=(10, 5), dpi = 300, facecolor = 'g') plt.grid() #畫網格線 plt.title('A green photo') plt.savefig('E:\Python\ StudyOfMatplotlib') #圖片的存儲路徑 plt.show()得到的圖像就會像下面一樣:
?
(2)子圖與子圖布局
在同一張圖片中繪制兩張及兩張以上的圖片
subplot()
用法: subplot(行,列,當前圖片的編號)
import matplotlib.pyplot as plt fig1 = plt.figure(figsize=(10, 5), dpi = 200, facecolor = 'g', edgecolor = 'b') plt.suptitle('A green photo') # 添加主標題 kfig1 = plt.subplot(1, 2, 1) plt.title('First photo') #添加副標題 kfig2 = plt.subplot(1, 2, 2) plt.title('Second photo') plt.savefig('E:\Python\StudyOfMatplotlib\ green') plt.show()就可以得到下面的圖像:
?
當然也可以添加其他類型的坐標系,比如極坐標:
?
那么就可以得到下面的畫布形式:
?
subplots()
返回的值的類型為元組,其中包含兩個元素:第一個為一個畫布,第二個是子圖,subplots參數與subplots相似。兩者都可以規劃figure劃分為n個子圖,但每條subplot命令只會創建一個子圖,而一條subplots就可以將所有子圖創建好。
函數:subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None,**fig_kw)
參數:
-nrows / ncols:在行列上子圖分割的份數
?sharex / sharey:是否共軸。可選:‘none’, ‘all’, ‘row’, ‘col’, ‘True’, ‘False’
- all / True:所有子圖共享軸
- none / False:各自享有自己的軸
- row / col:按子圖行或列共享x,y軸
squeeze:在返回多個子圖時,axes是否要壓縮為1維數組
subplot_kw:創建subplot的關鍵字字典
**fig_kw:創建figure時的其他關鍵字
用法:
x = np.arange(0, 100) y = np.sin(0.1*np.pi*x) fig4, axes = plt.subplots(2, 2, dpi = 300, facecolor = 'g') axes[0, 0].plot(y, 'b') axes[0, 0].grid(color = 'r', linestyle = '--', linewidth = 1) plt.savefig('E:\Python\StudyOfMatplotlib\ kidstable')可以得到下面的圖像:
?
可以看出在上面的圖像中并沒有公用 x 軸或者 y 軸,下面嘗試使用同一個軸:
其實只要添加 sharex = 'all', sharey = 'all' 就可以了
?
(3)坐標軸和刻度的名稱
坐標軸名稱
首先可以使用簡單的 xlabel 和 ylabel 進行坐標軸的命名,如:
fig1 = plt.figure(figsize=(10, 5), dpi = 200, facecolor = 'g', edgecolor = 'k') plt.suptitle('A green photo') kfig1 = plt.subplot(1, 3, 1) plt.xlabel('x/(0 ~ 100)') plt.ylabel('y/(0 ~ 100)') plt.title('First photo')? 坐標軸范圍
比如我們想在 (-10,10)中繪制某一段函數,但一般圖像中默認的范圍不會達到我們的預期,所以我們需要設定坐標軸的范圍
xlim & ylim
首先我們可以使用 xlim 和 ylim 這兩個命令進行坐標軸的范圍的限定
還是拿前面的圖案當作例子:
fig1 = plt.figure(figsize=(10, 5), dpi = 200, facecolor = 'g', edgecolor = 'k') plt.suptitle('A green photo') kfig1 = plt.subplot(1, 3, 1) plt.xlabel('x/(0 ~ 100)') plt.ylabel('y/(0 ~ 100)') plt.xlim(-10, 10) #對 x 軸進行限定 plt.ylim(-100, 100) #對 y 軸進行限定 plt.title('First photo')? 可以看出 The first photo? 中的 x 軸和 y 軸都已經被限定起來了
xticks & yticks
xlim & ylim 能夠設置的基本上只有坐標軸的范圍,而 xticks 和 yticks 既可以設置范圍也可以設置每個刻度之間的間距,所以使用 xticks & yticks 的便利以及功效遠大于 xlim & ylim
對前面的圖像的中的第二個子圖進行修改:
kfig2 = plt.subplot(1, 3, 2) plt.xticks(range(-10, 10, 2)) #對 x 軸進行限定,以 2 為單位 plt.title('Second photo')?可以看出第二張子圖中的 x 被進行了限定
xticks & yticks 的使用功能不止于此,可以在其中加入其他命令來完成一些特定的功能需求:
在該語句中加入 rotation 可以對坐標軸的標度的角度進行改變
?
可以看出底部的標碼傾斜了一定角度
還可以用來實現一年十二月份的數據分析:
plt.xticks(np.arange(12), calendar.month_name[1:13], rotation = 30)calendar 是一個第三方庫,需要進行引用
? 第二張圖中的橫坐標發生了變化
(4)圖例和文本標注
圖例
此處參考:3.Matplotlib配置圖例與顏色條
首先我們嘗試建立一個簡單的圖例
x = np.arange(0, 100) y = np.sin(0.1*np.pi*x) y2 = 0.5*np.random.randn(100) plt.style.use('classic') fig5, axes = plt.subplots(dpi = 300, facecolor = 'w') plt.title('legend') axes.plot(y, '-b', label = 'sin') axes.plot(y2, '--r', label = 'random') axes.legend() plt.savefig('E:\Python\StudyOfMatplotlib\ legend') plt.show()? 可以看出,圖例是默認添加在右上角上的,可以對其位置進行調整
對上面的代碼進行如下的添加可得
axes.legend(loc = 'upper left')? 前面的圖例中都存在有邊框,所以我們可以嘗試把邊框給去了
還是在圖例的語句中進行修改:
axes.legend(loc = 'lower center', frameon = False)? 對于圖例顯示的列數,也可以進行修改
使用 ncol 函數:
axes.legend(loc = 'lower center', frameon = False, ncol = 2)? 文本標注(中文&英文)
對于繪制在圖中的曲線,我們有時候可能需要添加文本進行標注,比如指定某一條特定的曲線,標注它的函數表達式
由于在 Matplotlib? 在繪圖添加文字時不支持中文,所以我們首先需要讓它支持中文,可以使用下面的命令plt.rcParams['屬性'] = '屬性值' 來修改全局的字體
此處參考:Matplotlib:文本標注,箭頭(Annotation) 標注
plt.rcParams['font.family'] = 'SimHei' #將全局字體改為黑體 x = np.arange(0, 100) y = np.sin(0.1*np.pi*x) #生成正弦信號 y2 = 0.5*np.random.randn(100) #生成隨機信號 plt.style.use('classic') fig5, axes = plt.subplots(dpi = 300, facecolor = 'g') #創建畫布 plt.title('圖例及文本', fontproperties = 'SimHei') #畫布命名 axes.plot(y, '-b', label = 'sin') #繪制圖像 axes.plot(y2, '--r', label = 'random') plt.xlabel('x軸', fontproperties = 'SimHei') #黑體命名 x 軸 plt.ylabel('y軸', fontproperties = 'SimHei') plt.xticks(range(0, 100, 10)) #對軸上單位進行限定 plt.yticks(range(-2, 2, 1)) axes.legend(loc = 'lower center', frameon = False, ncol = 2) #添加圖例 plt.grid(True) #添加方格 plt.savefig('E:\Python\StudyOfMatplotlib\ legend') #存儲圖像,如果需要復制代碼需修改這一行 plt.show()?
可以看出,現在該繪圖庫支持中文注釋,圖像標題都可以使用中文
接下來我們嘗試對上面的圖中的正弦信號加上 sinx 的標注以及中文形式的標注
其實只要添加 plt.text(x, y, r"名稱") 就可以了,其中 x&y 代表坐標點
plt.text(25, 1, r"sinx/正弦信號", color = 'r', fontproperties = 'SimHei')?
但是如果一張圖中有多條曲線,那么使用標注可能會出現混亂的狀況,所以我們也可以嘗試添加箭頭,來確定的表示某一條曲線
下面我們嘗試對正弦信號進行添加箭頭的標注
使用 plt.annotate() 函數就可以添加箭頭
plt.annotate(text ='sinx', xy=(45, 1), xytext = (50, 2), arrowprops={'arrowstyle':'->'}, color = 'r')xy = (45, 1): 箭頭指的坐標點
xytext(50, 2): 標注的位置坐標點
?
3. 圖形繪制
使用繪圖庫可以快速繪制出需要的類型的圖像
首先繪制任何圖,如果想要解決中文顯示問題,需要引用下面的代碼
plt.rcParams['font.family'] = 'SimHei' #將全局字體改為黑體 plt.rcParams['axes.unicode_minus'] = False #正常使用符合負號(1)曲線圖
以繪制一個正弦函數為例:
plt.rcParams['font.family'] = 'SimHei' #將全局中文字體改為黑體 plt.rcParams['axes.unicode_minus'] = False fig6, axes = plt.subplots(figsize=(10, 10), dpi = 300, facecolor = 'w') #創建一個畫布,大小為10乘10,分辨率為 300, 底部顏色為白色 plt.title('曲線圖練習', fontproperties = 'SimHei', color = 'k') #設置標題 x = np.arange(0, 100) #確定x的范圍 plt.xlim(0, 100) #對 x 軸范圍進行限定 plt.ylim(-2, 2) plt.xlabel('x 軸的值', fontproperties = 'SimHei', color = 'k') #確定軸的名稱并將顏色設置為黑色 plt.ylabel('y 軸的值', fontproperties = 'SimHei', color = 'k') plt.plot(np.sin(0.1*x), 'b', label = 'sinx') plt.annotate(text = 'sinx', xy = (20, 1), xytext = (25, 1), arrowprops = {'arrowstyle':'->'}, color = 'r') plt.legend(loc = 'lower center') #添加圖例 plt.savefig('E:\Python\StudyOfMatplotlib\ 曲線') plt.show()?
(2)散點圖
繪制散點圖,需要用到 scatter() 函數
如果兩組數據有限,可以嘗試使用列表進行表示
比如五個人的身高和體重的數據如下:
height = [166, 171, 174, 182, 168]
weight = [52, 58, 61, 60, 55]
使用散點圖來表示 體重-身高 之間的聯系
height = [166, 171, 174, 182, 168] weight = [52, 58, 61, 60, 55] fig7, axes = plt.subplots(figsize=(10, 10), dpi = 300, facecolor = 'w') axes.scatter(weight, height) plt.xticks(range(50, 65, 1)) plt.yticks(range(165, 185, 2)) plt.xlabel('weight') plt.ylabel('height') plt.savefig('E:\Python\StudyOfMatplotlib\ 散點圖') plt.show()? 設置好坐標軸之后可以看出繪制的圖像還是比較理想的
使用散點圖可以對大量的數據進行分析,為數據處理提供很大的便利
(3)直方圖
直方圖是一個統計報告圖,面積表示頻數,寬度表示組距,所以高度是 頻數/組距
繪制直方圖使用 hist(data = , bins = , normed = , facecolor = , edgecolor = , alpha =) 函數
data:必選參數,繪圖數據
bins:直方圖的長條形數目,可選項,默認為10
normed:是否將得到的直方圖向量歸一化,可選項,默認為0,代表不歸一化,顯示頻數;normed=1表示歸一化,顯示頻率
facecolor:長條形的顏色
edgecolor:長條形邊框的顏色
alpha:透明度
?
其實頻數/組距就是頻率,所以繪制出的直方圖的縱坐標表示的是頻率了,可以看出生成的隨機數列是滿足正態分布,沒錯,本處使用的生成隨機數的函數就會生成正態分布的序列
(4)餅圖
為了顯示不同類型的統計量在總體中的占比,使用餅圖可以很好的滿足這種需求
繪制餅圖的函數為 plt.pie(x, labels=,autopct=,colors)
x:數量,自動算百分比
abels:每部分名稱
autopct:占比顯示
colors:每部分顏色
在這里我們假設統計一個年級的學生的身高,并使用餅圖表示不同身高中的人數分布
fig7, axes = plt.subplots(figsize=(10, 10), dpi = 300, facecolor = 'w', edgecolor = 'b') #創建畫布 height1 = ['150-155', '155-160', '160-165', '165-170', '170-175', '175-180', '180-185', '185-190'] number = [52, 63, 67, 73, 76, 59, 66, 51] plt.pie(number, labels = height1, autopct ='%1.2f%%', colors = ['r', 'g', 'w', 'y', 'g', 'c', 'm', 'y']) plt.legend() #添加圖例 plt.title('19級身高占比') plt.savefig('E:\Python\StudyOfMatplotlib\ 餅狀圖') plt.show()在給餅狀圖添加每一段的名稱時不要忘了在列表中給每一個元素加上單引號
?
(5)極坐標繪圖
調用subplot()創建子圖時通過設置projection='polar',便可以創建一個極坐標子圖,這個我們在前面創建子圖的部分有介紹過,然后通過調用plot()在極坐標子圖中繪制圖表。
創建簡單的極坐標軸
fig8 = plt.figure(figsize=(10, 10), dpi = 300, facecolor = 'w', edgecolor = 'b') plt.subplot(projection = 'polar') plt.savefig('E:\Python\StudyOfMatplotlib\ 極坐標') plt.show()?
極坐標軸中的一些參數設置
fig8 = plt.figure(figsize=(10, 10), dpi = 300, facecolor = 'w', edgecolor = 'b') plt.subplot(projection = 'polar') plt.direction(-1) # 設置逆時針為正方向 plt.thetagrids(np.arange(0.0, 360.0, 90), ['a', 'b', 'c', 'd']) #對角度進行設置 plt.rgrids(np.arange(0.2,2,0.4)) #對極徑jin'xing設置 plt.savefig('E:\Python\StudyOfMatplotlib\ 極坐標') plt.show()? 代碼和繪制的圖形進行對比可以看出
在設置角度的時候 np.arange(0.0, 360.0, 90),[a, b, c, d] 的意思是將 0~360 進行四等分,并使用后面的字母進行標注,后面對極徑的設置也是這樣的意思
極坐標繪制雷達圖
fig8 = plt.figure(figsize=(10, 10), dpi = 300, facecolor = 'w', edgecolor = 'b') plt.subplot(projection = 'polar') plt.direction(-1) # 設置逆時針為正方向 plt.thetagrids(np.arange(0.0, 360.0, 90), ['a', 'b', 'c', 'd']) #對角度進行設置 plt.rgrids(np.arange(0, 16, 2)) #對極徑jin'xing設置 data1 = np.random.randint(1, 10, 10) plt.plot(data1, color = 'r') plt.fill(data1, alpha = 0.2, color = 'r') plt.savefig('E:\Python\StudyOfMatplotlib\ 極坐標') plt.show()? 在極坐標中使用隨機數進行圖像繪制
4. 風格和樣式
簡單的繪制圖形很容易就能實現,使用該繪圖庫還可以對風格進行設置,按照自己喜歡的樣式來設置圖像風格,使其更加美觀大氣
(1)畫布設置
首先我們創建一個默認的畫布,然后與其他的風格進行對比,觀察不同風格之間的區別,學會熟練使用它們,提高生產力
x = np.arange(0, 100) a = np.random.randn(100) fig9, axes = plt.subplots(1, 2, figsize=(10, 10), dpi = 300, facecolor = 'w') axes[0].plot(np.sin(0.1*np.pi*x)) axes[1].hist(a, bins = 10) plt.savefig('E:\Python\StudyOfMatplotlib\ 畫布風格') plt.show()? 可以看出默認的畫布穩重大氣,不失優雅。。。
我們可以打印出 Matplotlib 繪圖庫中包含的所有的繪圖樣式
print(plt.style.available) #打印所有繪圖樣式輸出為:
['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
下面從中挑選幾個風格進行繪制:
plt.style.use(bmp)
plt.rcParams['font.family'] = 'SimHei' #將全局中文字體改為黑體 plt.style.use('bmh') #使用這句命令更換風格就行,下面的例子中只粘貼這一句代碼 x = np.arange(0, 100) a = np.random.randn(100) fig9, axes = plt.subplots(1, 2, figsize=(10, 10), dpi = 300, facecolor = 'w') axes[0].plot(np.sin(0.1*np.pi*x)) axes[1].hist(a, bins = 10) plt.savefig('E:\Python\StudyOfMatplotlib\ 畫布風格') plt.show()? plt.style.use('calssic')
plt.style.use('classic')? plt.style.use('dark_background')
plt.style.use('dark_background')? 其他的一些畫布風格的變換都是一致的,僅僅使用命令就行,本文中就不再進行贅述
(2)子圖布局
繪制圖像時,并排或者并列進行圖像的對比對于數據的有效觀察有很好的幫助,所以我們可能需要在一張圖像中插入好幾個目標數據分布,對于它們的布局也應該有一定的了解
plt.axes:手繪子圖
使用該命令會在原來的軸中創建一個軸對象,其中的參數為 [left, bottom, width, height],這些參數的范圍為 0~1
left: 從 x 軸的 left 處開始
bottom: 從 y 軸的 bottom 處開始
width: 長度為 x 軸的 width 倍
height: 高度為 y 軸的 height 倍
以下面的例子進行學習比較容易理解:
plt.figure(figsize=(10, 10), dpi = 300, facecolor = 'w') plt.title('子圖布局') plt.axes([0.55, 0.65, 0.4, 0.3]) plt.savefig('E:\Python\StudyOfMatplotlib\ 子圖布局1') plt.show()由上圖中的參數可知,子圖的原點應該位于 (0.55,0.65),橫坐標范圍為 0~4,即應該位于主坐標的 0.55~0.9,縱坐標的范圍為 0~0.3, 即應該位于主坐標的 0.65~0.95
但是很明顯可以看出,畫的圖出問題了!!!!
程序的運行也報錯了,雖然繪制出了圖像
我們要對其進行調整:
使用 subplots_adjust() 函數
對于該函數的介紹可以參考這篇文章:Python中subplots_adjust函數的說明
plt.subplots_adjust(top = 0.95, bottom = 0.65, left = 0.55, right = 0.95)最終得到子圖如下:
可以對整個圖像加一個大標題,使用 plt.suptitle() 函數
plt.suptitle('子圖布局') plt.title('子圖1')plt.subplots()
這個函數在上面的畫布中進行過介紹,所以不在這里進行描述了
plt.Gridspec()
使用該函數可以繪制不同于常規的子圖,可以跨越多行多列,可以被 subplot() 識別
gs = plt.GridSpec(2, 3, wspace = 0.4, hspace = 0.3) fig = plt.figure() fig.add_subplot(gs[0:1, 0:1]) fig.add_subplot(gs[0:1, 1:]) fig.add_subplot(gs[1:, 0:2]) fig.add_subplot(gs[1:, 2:]) plt.savefig('E:\Python\StudyOfMatplotlib\ GridSpec') plt.show()?該命令可以對整個畫布進行無規則分割,使用范圍較廣
(3)顏色
主題配色
首先是主題的配色,這個在前面的的畫布設置中已經介紹了,如果想要觀察每一種風格中的顏色配置,可以使用 for 循環進行繪制,觀察所有主題的配色
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) for i in plt.style.available:# plt.figure(figsize=(10, 10), dpi = 300)plt.style.use(i)plt.plot(x, y1, x, y2)plt.title(i)plt.show()創建畫布那一步在這里可以省略,不然畫圖速度減慢
這樣就會按順序繪制出所有主題
可以看出上圖中的風格就不錯
其他顏色設置
圖像來源:見水印
使用 color 命令結合上面的途中給出的數據,就可以更換所有的顏色了
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) plt.plot(y1, color = 'deeppink') plt.plot(y2, color = 'cyan') plt.savefig('E:\Python\StudyOfMatplotlib\ colors') plt.show()?
(4)線條和點的樣式
線條樣式
對于線條的樣式,可以使用 linestyle() 進行修改:
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) plt.plot(y1, color = 'deeppink', linestyle = '--') plt.plot(y2, color = 'cyan', linestyle = ':') plt.savefig('E:\Python\StudyOfMatplotlib\ colors') plt.show()其他的一些樣式,可以參考這篇文章:matplotlib繪圖線條樣式和線條顏色
但是嘗試使用 > 時出現報錯:
所以主要還是使用上圖中的可支持的風格就行
點的樣式
點的樣式主要有以下幾種
此處我們使用上面的散點圖進行繪制:
使用 marker 命令進行修改
其他的在 marker 命令中進行修改就可以了
(5)坐標軸
一般我們如果對坐標軸進行限定需要使用到 gca 函數,其實畫圖的過程中對于坐標軸的設定使用前面的子圖設置就可以了,但在此處我們使用該函數
設置范圍
對于坐標軸的范圍的設置我們在前面提到過,使用 xlim&ylim 或者 xtricks&yticks 函數就可以了,此處也可以使用 axis[]
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) plt.plot(y1, color = 'deeppink', linestyle = 'dotted') plt.plot(y2, color = 'cyan', linestyle = ':') plt.axis([-20, 120, -1.2, 1.2]) # x 軸范圍設置為 -20~120, y 軸范圍設置為 -1.2~1.2 plt.savefig('E:\Python\StudyOfMatplotlib\ colors') plt.show()?
?控制交叉點的位置
一般來說交叉點是原點,但我們也可以對其進行移動并將其挪到特定的位置
首先是將坐標交叉點移動到坐標軸中心:
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) a = plt.gca() #使用該函數對坐標軸進行設置 plt.plot(y1, color = 'deeppink', linestyle = 'dotted') plt.plot(y2, color = 'cyan', linestyle = ':') plt.axis([-20, 120, -1.2, 1.2]) a.spines['left'].set_position('center') #將左邊的軸移到中心 a.spines['bottom'].set_position('center') #將底部的軸移到中心 plt.savefig('E:\Python\StudyOfMatplotlib\ colors') plt.show()可以看出雖然移動成功了但邊框多余了,我們進行修改
將右邊的和上面的軸取消掉:
a.spines['right'].set_visible(False) a.spines['top'].set_visible(False)我們也能夠指定交叉點的位置
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) a = plt.gca() plt.plot(y1, color = 'deeppink', linestyle = 'dotted') plt.plot(y2, color = 'cyan', linestyle = ':') plt.axis([-20, 120, -1.2, 1.2]) a.spines['right'].set_visible(False) a.spines['top'].set_visible(False) a.spines['left'].set_position(('data', 40)) #交叉點位于左邊軸的40處 a.spines['bottom'].set_position(('data', -0.5)) #交叉點位于底部軸的-0.5處 plt.savefig('E:\Python\StudyOfMatplotlib\ colors') plt.show()?不能忘了將('data', 數值)使用括號括起來
在坐標軸上添加箭頭
本例參考自:知乎文章
在mpl_toolkits中有一個axisartist,它提供的函數可以修改更多的內容。原則上之前所有的修改,都可以通過axisartist實現
a = plt.figure(figsize=(10, 2), dpi = 600) # 建立一個figure ax = Subplot(a, 111) a.add_subplot(ax) #將Subplot建立的坐標軸添加到figure a上 ax.axis['right'].set_visible(False) ax.axis['top'].set_visible(False) ax.axis['left'].set_axisline_style('->') # 給y軸加一個箭頭 ax.axis['bottom'].set_axisline_style('->') # 給x軸加一個箭頭 plt.savefig('E:\Python\StudyOfMatplotlib\ arrow') plt.show()(6)刻度
對于刻度的風格調整主要使用 tick_pararms() 函數
其中的主要參數包含:
axis: 可選"x","y","both",默認"both",分別代表,對x軸操作,對y軸操作,對兩個軸都操作。
direction: 可選 "in","out","inout"代表,刻度線顯示在坐標軸里面,坐標軸外邊,雙邊
length: 刻度線長度,上面圖里的刻度線長度,我設置的為6
color: 刻度線顏色,上面圖里的刻度線顏色,我設置的為“r”
width: 刻度線寬度
pad: 刻度線與刻度標簽之間的間隔
bottom, top, left, right四個參數對應四個邊框,它們的取值為布爾類型,True 表示顯示對應邊框上的刻度線,False,代表不顯示,默認True
labelbottom, labeltop, labelleft, labelright,與上面四個對應,代表的是四個邊框上的類標的設置,取值為布爾類型,True代表顯示對應邊框上的類標,False代表不顯示。
labelsize:類標大小的設置參數,可取浮點型數值,也可去"medium","large","small"
labelrotation:旋轉類標一定的角度,與在set_xticklabels()中的參數rotation作用相同
下面我們進行一個整體的演示
首先我們使用沒有對刻度進行修改的代碼:
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) a = plt.gca() plt.plot(y1, color = 'deeppink', linestyle = 'dotted') plt.plot(y2, color = 'cyan', linestyle = ':') plt.axis([-20, 120, -1.2, 1.2]) plt.savefig('E:\Python\StudyOfMatplotlib\ colors') plt.show()然后我們對其中的一個坐標軸上的刻度進行修改,與另外的一個進行對比:
觀察 tick_params() 函數,并與前面的參數進行對照即可
?
(7)文本
首先添加中文文本需要下面的兩句命令來使這個庫支持中文以及數學內容:
plt.rcParams['font.family'] = 'SimHei' #將全局中文字體改為黑體 plt.rcParams['axes.unicode_minus'] = False #正常表示負號在前面的入門文本介紹中大致講了一些文本標注的方式在這里主要以數學符號的添加作為例子
由于文本的顯示使用的是正則表達式,所以需要將其使用 r"文本內容" 進行展示,對于一些特定含義的英文字母需要用反斜杠(\)將其表示出來,數學文本則需要引用在 $..$ 之中
還是以上面的圖像作為例子:
plt.text(20, 1, r"sin(0.5*$\pi$*x)") # 在(20,1)處進行標注其他的對于文本的調試主要是文字風格以及顏色等,如果需要添加數學公式則需要添加不同的公式的表達方式,需要用到時進行搜索就行了
(8)圖例
對于圖例的介紹在前面也講的比較詳細了,主要涉及到對其的位置,方框因素的調整及改變
下面簡單的進行一些修改
x = np.arange(0, 100) y1 = np.sin(0.05*np.pi*x) y2 = np.sin(0.05*(x - 3)*np.pi) a = plt.gca() plt.plot(y1, color = 'deeppink', linestyle = '--', label = 'sin(0.05*$\pi$*x)') plt.plot(y2, color = 'cyan', linestyle = ':', label = 'cos(0.05*$\pi$*x)') plt.axis([-20, 120, -1.2, 1.2]) plt.legend(loc = 'upper center', frameon = False, ncol = 2) #將圖例展示在上方最中央并去掉邊框,列數改為兩列 #plt.text(20, 1, r"sin(0.5*$\pi$*x)") # 在(20,1)處進行標注 #a.spines['right'].set_visible(False) #a.spines['top'].set_visible(False) #a.spines['left'].set_position(('data', 40)) #交叉點位于左邊軸的40處 #a.spines['bottom'].set_position(('data', -0.5)) #交叉點位于底部軸的-0.5處 #plt.tick_params(axis = 'x', direction = 'in', pad = 5, color = 'cyan', width = 1.2, length = 3, labelsize = 8, labelcolor = 'r', rotation = 30, bottom = 'False') plt.savefig('E:\Python\StudyOfMatplotlib\ colors') plt.show()得到效果如下:
(9)網格設置
首先網格的添加只需要使用 plt.grid() 函數就可以了
然后就是對于網格風格的一些設定
對于特定方向的設定(axis)
plt.grid(axis = "x" ) # y 軸方向的線條 plt.grid(axis = "y" ) # x 軸方向的線條顏色的設定(color)
plt.grid(axis = "y", color = 'b') #顏色設置為藍色?線條風格(linestyle)
plt.grid(axis = "y", color = 'b', linestyle = '--')在網格中的設定常用的也就這些,其他的次刻度等要素如果感興趣也可以去學習
結束語
?????? 本人是一名在校學生,在學習繪圖庫的過程中進行了一下匯總,但愿能夠幫到小伙伴們,在總結這個庫的過程中參考的一些資料都有標注,如果大家感興趣或者希望理解的更加透徹可以點進去進行學習;學習過程中遇到了一些問題,在解決問題的過程中不斷增長知識,獲得成就感才是我們所需要的。既然目標是地平線,留給世界的只能是背影,希望大家一起努力,不要忘了自己最初的夢想,追夢途中即便摔倒也要爬起來繼續奔跑啊!
?
?
總結
以上是生活随笔為你收集整理的Python 绘图库 Matplotlib的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: M 点滑动平均 Python 实现
- 下一篇: Python 计算机视觉(一) —— 数