本文主要講解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繪圖中中文顯示的問題,並掌握一些基本的繪圖函數以及方法。