學了這麼多年python了,還一直沒有系統地了解過python的畫圖功能。
每次都是現學現用,但是某些比較緊急的場合,往往就會比較耗時又耗力,因為不成體系,還經常會忘記已經吸納的新知識。
是以,我決定把這塊的畫圖功能系統的學習一下,進行知識儲備。
Python的pyplot子產品繪制圖表的基本操作。
=======================================================
一個簡單的二維折線圖:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1.2, 2.5, 4.5, 7.3]
# plot函數作圖
plt.plot(x, y)
plt.savefig("test.png", dpi=120)
# show函數展示出這個圖,如果沒有這行代碼,則程式完成繪圖,但看不到
plt.show()
運作後的效果是這樣的,從數值對應上,橫軸應該是x軸,縱軸應該是y軸。
但是,對應圖與代碼,另外疑問的是,為什麼x軸給出的是整數,在繪制時卻用了浮點?而又為什麼y軸給出的是浮點數,在繪制時卻用的是整數呢?
----------------------------------------------------------------------------------------------
另一個點是:
show()
函數在通常的運作情況下,将會阻塞程式的運作,直到使用者關閉繪圖視窗。換句話說,在關閉
show()
函數彈出的圖像視窗前,
show()
函數後面的代碼不會運作,直到使用者關閉圖像視窗,才會繼續。
我測試了普通的print()之後,發現并沒有阻塞。。。
但是呢,當我在調用
plt.savefig()
将目前的Figure對象儲存成圖像檔案時,
如果
plt.savefig()
代碼放在了
plt.show()
之後,那我本地儲存的圖像就是一張空白圖,不符合預期;
但如果
plt.savefig()
代碼放在了
plt.show()
之前,則可以成功實作儲存。
雖然問題不大,但也讓我産生疑問:到底是有阻塞還是沒有阻塞呢?如果有,阻塞什麼,而又不阻塞什麼呢?
=======================================================
不同風格的線條:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1.2, 2.5, 4.5, 7.3]
#線條顔色、線條樣式、突出(marker)每個記錄的點、線條粗細
plt.plot(x, y, color="r", linestyle="--", marker="*", linewidth=1.0)
plt.show()
運作後的效果:
---------------------------------------------------------------------------------------------
線條風格(linstyle):
supported values are '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'
-----------------------------------------------------------------------------------------------
線條顔色(color):
-----------------------------------------------------------------------------------------------
線條标記(marker):
======================================================
坐标軸控制
-繪圖範圍:import matplotlib.pyplot as plt
import numpy as np
#x 的取值範圍
x = np.arange(-5, 5, 0.02)
y = np.sin(x)
#控制圖像的繪圖範圍
#plt.axis([x_min, x_max, y_min, y_max])
plt.axis([-np.pi, np.pi, -2, 2])
plt.plot(x, y, color="r", linestyle="-", linewidth=1)
plt.show()
運作效果如下:
值得注意的一個點:
雖然x的取值範圍在[−5,5],但是繪圖時,隻是展示了[−π,π]之間的函數圖。
引出一個可以控制圖像範圍的函數:
plt.axis([x_min, x_max, y_min, y_max])
如果隻是單獨想要控制x軸或者y軸的取值,則可以用
plt.xlim(x_min, x_max)
和
plt.ylim(y_min, y_max)
,用法與
plt.axis()
類似。
----------------------------------------------------------------------------------------------
-标題和間隔:import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(-2 * math.pi, 2 * math.pi, 0.02)
y = np.sin(x)
plt.axis([-10, 10, -2, 2])
plt.xticks([i * np.pi/2 for i in range(-4, 5)], [str(i * 0.5) + "$pi$" for i in range(-4, 5)])
plt.yticks([i * 0.5 for i in range(-4, 5)])
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x, y, color="r", linestyle="-", linewidth=1)
plt.show()
運作效果如下:
純粹知識的學習記錄:
函數
plt.xlabel()
和
plt.xlabel()
用來實作對x軸和y軸添加标題。
函數
plt.xticks()
和
plt.yticks()
用來實作對x軸和y軸坐标間隔(也就是軸記号)的設定。
用法上,函數的輸入是兩個清單,第一個表示取值,第二個表示标記。當然如果你的标記就是取值本身,則第二個清單可以忽略。(支援latex公式表達)
=======================================================
參考連結:https://blog.csdn.net/guoziqing506/article/details/78975150
PS:感謝參考文章的作者,從細節、小處一步步向前推進,能夠很好的幫助我建立知識體系。
不過,一如既往地,我的問題真多,雖然問題不大,但是擁有自己的思考分析,我認為是應該一直堅持的事情。
畢竟自己小菜雞,一直在參考文章進行學習,期待學習後期可以有自己完全獨立、不依賴參考文章的成形文字。