matplotlib的基本用法,並在橫座標中以及其他部分顯示中文

本文主要講解matplotlib的基本用法,方便自己以後使用該庫進行畫圖。主要內容有:基本繪製一個圖形、橫座標改爲中文標尺、添加標題標籤等。

看完這一例題,使用matplotlib畫圖,應該就沒什麼問題了。

1.繪製基本圖形

題目:隨機生成10點到12點(120分鐘)之間的溫度,並繪製出圖形。

from matplotlib import pyplot as plt
import random

x = range(0,120)
y = [random.randint(20,35) for i in range(120)] #隨機產生20-35度的氣候溫度

plt.plot(x,y)
plt.show()

 x爲產生的0-120分鐘的時間序列,間隔一分鐘

y爲隨機生成120個氣候溫度,溫度範圍爲20-35度之間。

通過plt.plot()和plt.show()函數展示出圖形,一個最基本的圖形就繪製出來了,如下圖所示:

在圖中,橫座標爲0-120之間的數字,表示分鐘。

題目中表示的是10點到12點,爲了更好的觀看圖形,需要將橫座標變換成對應時間。

2.橫座標改爲中文

需要修改橫座標,就需要修改橫座標的標尺,使用plt.xticks(x_value,x_change)去修改。

x_value:原來的座標值

x_change:修改後的座標值(可爲字符串)

2.1生成x_chage的值

因爲橫座標是要不斷改變的,這裏每隔一分鐘,是需要+1的,但是字符串又不能直接+1,所以需要簡單將時間處理一下。

原始座標:0到120之間不斷加1

修改後座標:10點0分到11點0分,再到12點0分不斷加1

x_change = ["10點{}分".format(i) for i in range(60)] #每隔60分鐘,就需要進1,轉下一行代碼
x_change += ["11點{}分".format(i) for i in range(60)] #如果需要繼續12點,複製這一行代碼,將11點改爲12點

plt.xticks(list(x)[::5], x_change[::5],rotation=45) #[::5]表示需要顯示的間隔數,數字越大越稀疏,越小越密集,根據需要修改

使用上兩行代碼,x_change的值就從10點0分開始,一直加到12點0分。

然後通過最下面的一行代碼,把修改的值加到橫座標系當中,rotation=45表示文字旋轉45度,得到下圖所示:

圖中的中文部分變成了白框,沒有顯示中文,這是因爲在matplotlib中不支持中文顯示,爲了將中文顯示出來需要進行一些修改。

2.2顯示中文

本文以自己的windows電腦爲例,在代碼中加入下面兩行代碼:

from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
C:\Windows\Fonts\msyh.ttc 爲windows只帶的字體路徑,根據需要修改需要的路徑參數即可。

修改好字體後,需要將字體應用到橫座標中,如圖:

再次繪圖,座標系中就可以顯示出中文。

2.3小結

將上述代碼合併

from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")

x = range(0,120)
y = [random.randint(20,35) for i in range(120)] #隨機產生20-35度的氣候溫度

plt.plot(x,y)

x_change = ["10點{}分".format(i) for i in range(60)] #每隔60分鐘,就需要進1,轉下一行代碼
x_change += ["11點{}分".format(i) for i in range(60)] #如果需要繼續12點,複製這一行代碼,將11點改爲12點
plt.xticks(list(x)[::5], x_change[::5],rotation=45,fontproperties=my_font) #[::5]表示需要顯示的間隔數,數字越大越稀疏,越小越密集,根據需要修改

plt.show()

得到的圖形效果如下:

此時,中文可以顯示出來。

3.添加其他信息

爲了讓圖形顯示更多的信息,需要給橫縱座標顯示標籤,並且給整個圖形加上一個標題,需要增加如下代碼:

plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("10點-12點的溫度變化情況")

給橫縱座標加上時間、溫度標籤,並加上一個標題。但由於不支持中文,所以沒辦法,需要將之前調好的字體my_font應用進來,對代碼做如下修改:

plt.xlabel("時間", fontproperties=my_font)
plt.ylabel("溫度", fontproperties=my_font)
plt.title("10點-12點的溫度變化情況", fontproperties=my_font)

這樣就可以顯示出中文,在matplotlib中,其他需要顯示中文的地方也是如此操作。

4.總結

整體代碼:

from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")

x = range(0,120)
y = [random.randint(20,35) for i in range(120)] #隨機產生20-35度的氣候溫度

plt.plot(x,y)

x_change = ["10點{}分".format(i) for i in range(60)] #每隔60分鐘,就需要進1,轉下一行代碼
x_change += ["11點{}分".format(i) for i in range(60)] #如果需要繼續12點,複製這一行代碼,將11點改爲12點
plt.xticks(list(x)[::5], x_change[::5],rotation=45,fontproperties=my_font) #[::5]表示需要顯示的間隔數,數字越大越稀疏,越小越密集,根據需要修改

plt.xlabel("時間", fontproperties=my_font)
plt.ylabel("溫度", fontproperties=my_font)
plt.title("10點-12點的溫度變化情況", fontproperties=my_font)

plt.show()

效果圖:

根據如上方法,可以較好的解決matplotlib繪圖中中文顯示的問題,並掌握一些基本的繪圖函數以及方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章