Python matplotlib繪圖詳解

圖標英文顯示設置:

正常以字符串形式傳進去字串,英文顯示格式不是很美觀,為瞭讓文字更美觀點,在書寫時以這種格式寫:

r’$string$’

在這裡,如果需要特殊數學字符使用 \ 轉義,空格也需要轉義

比如:r’$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$’

一、figure窗口及坐標軸設置 

plt.figure(figsize = (20, 8), dpi = 80) 窗口,用於展示圖片

1、figure圖形的意思,這裡指我們畫的圖,

2、通過實例化一個figure並且傳遞參數,能夠在後臺自動使用該figure實例;

3、在圖像模糊的時候可以傳入dpi參數,讓圖片更加清晰

4、figsize:指定圖片的大小

5、linewidth:指定顯示的線的寬度

6、linestyle:指定線條顯示的風格,如:虛線 linestyle=”–“

ax = plt.gca() 獲取當前圖形的坐標軸

gca == “get current axis” 獲取坐標軸

ax.spines[‘right’].set_color(‘none’) 圖形的邊框

spines通過在[]設置left\right\bottom\top來對4個邊框進行格式設置

set_color是設置顏色

ax.xaxis.set_ticks_position(‘bottom’) 設置用哪個刻度做軸 使用bottom當作x軸
ax.spines[‘bottom’].set_position((‘data’, 0)) 設置坐標軸的位置 設置x軸的位置是放在y軸的0刻度處
import numpy as np
from matplotlib import pyplot as plt
 
x = np.linspace(-3, 3, 50)
y1 = x*2+1
y2 = x**2
 
#創建一個窗口
plt.figure()
#同一窗口放置多張圖片
l1, = plt.plot(x, y1, label='up')
l2, = plt.plot(x, y2, color="red", linewidth=2.0, linestyle="--", label='down')
#設置顯示圖例
plt.legend(handles=[l1, l2], labels=['aaa', 'bbb'], loc='best')
 
#設置坐標軸的取值范圍
plt.xlim((-1,2))
plt.ylim((-2,3))
 
#設置坐標軸的提示信息
plt.xlabel("I am x")
plt.ylabel("I am y")
 
#生成新的坐標點
new_ticks = np.linspace(-1, 2, 5) #將-1~2分為5份
#設置顯示出來的坐標單位
plt.xticks(new_ticks)
#人為指定坐標軸顯示的內容
#設置刻度上顯示的內容,但需要人為指定對應順序
plt.yticks([-2, -1.8, -1, 1.22, 3,], [r'$really\ bad$', r'$bad$', r'$normal$',
                            r'$good$', r'$really\ good$'])
 
# gca == "get current axis" 獲取坐標軸
ax = 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')
#橫坐標設置為y軸的0
ax.spines['bottom'].set_position(('data', 0)) #outward, axes
ax.spines['left'].set_position(('data', 0))
plt.show()

 二、為特殊點加註解(Annotation)

使用text()會將文本放置在軸域的任意位置。 文本的一個常見用例是標註繪圖的某些特征,而annotate()方法提供輔助函數,使標註變得容易。 annotate用於在圖形上給數據添加文本註解,而且支持帶箭頭的劃線工具,方便我們在合適的位置添加描述信息。在標註中,有兩個要考慮的點:由參數xy表示的標註位置和xytext的文本位置。 這兩個參數都是(x, y)元組。

參數說明:

Axes.annotate(s, xy, *args, **kwargs)

  • s:註釋文本的內容
  • xy:被註釋的坐標點,二維元組形如(x,y)
  • xytext:註釋文本的坐標點,也是二維元組,默認與xy相同
  • xycoords:被註釋點的坐標系屬性,允許輸入的值如下
屬性值 含義
‘figure points’ 以繪圖區左下角為參考,單位是點數
‘figure pixels’ 以繪圖區左下角為參考,單位是像素數
‘figure fraction’ 以繪圖區左下角為參考,單位是百分比
‘axes points’ 以子繪圖區左下角為參考,單位是點數(一個figure可以有多個axex,默認為1個)
‘axes pixels’ 以子繪圖區左下角為參考,單位是像素數
‘axes fraction’ 以子繪圖區左下角為參考,單位是百分比
‘data’ 以被註釋的坐標點xy為參考 (默認值)
‘polar’ 不使用本地數據坐標系,使用極坐標系
  • textcoords :註釋文本的坐標系屬性,默認與xycoords屬性值相同,也可設為不同的值。除瞭允許輸入xycoords的屬性值,還允許輸入以下兩種:
屬性值 含義
‘offset points’ 相對於被註釋點xy的偏移量(單位是點)
‘offset pixels’ 相對於被註釋點xy的偏移量(單位是像素)
  • arrowprops:箭頭的樣式,dict(字典)型數據,如果該屬性非空,則會在註釋文本和被註釋點之間畫一個箭頭。如果不設置’arrowstyle’ 關鍵字,則允許包含以下關鍵字:
關鍵字 說明
width 箭頭的寬度(單位是點)
headwidth 箭頭頭部的寬度(點)
headlength 箭頭頭部的長度(點)
shrink 箭頭兩端收縮的百分比(占總長)
? 任何 matplotlib.patches.FancyArrowPatch中的關鍵字
import numpy as np
from matplotlib import pyplot as plt
 
x = np.linspace(-3, 3, 50)
y1 = x*2+1
plt.figure()
plt.plot(x, y1, label='up')
 
#添加註釋
x0 = 1
y0 = 2*x0 + 1
#使用散點方式,隻顯示一個點, blue
plt.scatter(x0, y0, s=50, color='b')
#k--表示 black的 --
plt.plot([x0, x0], [0, y0], 'k--', lw=2.5)
 
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
 
#設置標註
#method 1
plt.annotate(r'$2x+1=%s$' % str(y0), xy=(x0, y0),
             xycoords='data', xytext=(+30, -30), textcoords='offset points',
             fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=.2'))
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$',
            fontdict={'size':16, 'color': 'r'})
 
plt.show()

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: