天天看點

matplot畫圖控制marker點的個數_python畫圖 - v0

matplot畫圖控制marker點的個數_python畫圖 - v0

學了這麼多年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軸。

matplot畫圖控制marker點的個數_python畫圖 - v0

但是,對應圖與代碼,另外疑問的是,為什麼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()
           

運作後的效果:

matplot畫圖控制marker點的個數_python畫圖 - v0

---------------------------------------------------------------------------------------------

線條風格(linstyle):

matplot畫圖控制marker點的個數_python畫圖 - v0

supported values are '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'

-----------------------------------------------------------------------------------------------

線條顔色(color):

matplot畫圖控制marker點的個數_python畫圖 - v0

-----------------------------------------------------------------------------------------------

線條标記(marker):

matplot畫圖控制marker點的個數_python畫圖 - v0

======================================================

坐标軸控制

-繪圖範圍:
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()
           

運作效果如下:

matplot畫圖控制marker點的個數_python畫圖 - v0

值得注意的一個點:

雖然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()
           

運作效果如下:

matplot畫圖控制marker點的個數_python畫圖 - v0

純粹知識的學習記錄:

函數

plt.xlabel()

plt.xlabel()

用來實作對x軸和y軸添加标題。

函數

plt.xticks()

plt.yticks()

用來實作對x軸和y軸坐标間隔(也就是軸記号)的設定。

用法上

,函數的輸入是兩個清單,第一個表示取值,第二個表示标記。當然如果你的标記就是取值本身,則第二個清單可以忽略。(支援latex公式表達)

=======================================================

參考連結:https://blog.csdn.net/guoziqing506/article/details/78975150

PS:感謝參考文章的作者,從細節、小處一步步向前推進,能夠很好的幫助我建立知識體系。

不過,一如既往地,我的問題真多,雖然問題不大,但是擁有自己的思考分析,我認為是應該一直堅持的事情。

畢竟自己小菜雞,一直在參考文章進行學習,期待學習後期可以有自己完全獨立、不依賴參考文章的成形文字。

繼續閱讀