matplotlib簡單示例


一、簡介

以下引用自百度百科

Matplotlib 是一個 Python 的 2D繪圖庫,它以各種硬拷貝格式和跨平台的交互式環境生成出版質量級別的圖形 。
通過 Matplotlib,開發者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。

二、流程

1. 明確要研究的問題
2. 選擇需要使用什么圖形(折線圖、直方圖……)來呈現
3. 准備相應的數據
4. 繪制圖形和完善美化圖形

在某些情況下,個人認為還有最后一點,是從圖中可以得出什么結論。
以下只是簡單的示例,就沒有一定按照上面的流程。

三、簡單示例

1.折線圖

1.1 什么是折線圖

以下引用自百度百科

折線圖是排列在工作表的列或行中的數據可以繪制到折線圖中。折線圖可以顯示隨時間(根據常用比例設置)而變化的連續數據,因此非常適用於顯示在相等時間間隔下數據的趨勢。

簡單來說,折線圖可以反映事物的變化情況。

1.2 准備數據

數據來自國家數據,選取了1978年至2017年的研究生招生數研究生畢業生數,下面只列舉了部分數據。

2017年 2016年 2015年 2014年 2013年 ...
研究生招生數(萬人) 80.6103 66.7064 64.5055 62.1323 61.1381 ...
研究生畢業生數(萬人) 57.8045 56.3938 55.1522 53.5863 51.3626 ...
1.3 繪制完善圖形

附上代碼,看注釋吧。

from matplotlib import pyplot as plt
from matplotlib import font_manager

# matplotlib默認不支持中文字符,設置中文字體,參數的值為系統字體路徑
my_font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\simsun.ttc")

# 需要繪制的數據
x = list(range(1978, 2018))
y_recruit = list(reversed(
    [80.6103, 66.7064, 64.5055, 62.1323, 61.1381, 58.9673, 56.0168, 53.8177, 51.0953, 44.6422, 41.8612, 39.7925,
     36.4831, 32.6286, 26.8925, 20.2611, 16.5197, 12.8484, 9.2225, 7.2508, 6.3749, 5.9398, 5.1053, 5.0864, 4.2145,
     3.3439, 2.9679, 2.9649, 2.8569, 3.5645, 3.9017, 4.131, 4.6871, 2.3181, 1.5642, 1.108, 0.9363, 0.3616, 0.811,
     1.0708]))
y_graduate = list(reversed(
    [57.8045, 56.3938, 55.1522, 53.5863, 51.3626, 48.6455, 42.9994, 38.36, 37.1273, 34.4825, 31.1839, 25.5902, 18.9728,
     15.0777, 11.1091, 8.0841, 6.7809, 5.8767, 5.467, 4.7077, 4.6539, 3.9652, 3.1877, 2.8047, 2.8214, 2.5692, 3.2537,
     3.544, 3.7232, 4.0838, 2.7603, 1.695, 1.7004, 0.2756, 0.4497, 0.4058, 1.1669, 0.0476, 0.014, 0.0009]))

# 設置圖形大小,dpi
plt.figure(figsize=(10,6.18),dpi=100)

# 繪制第一條折線
plt.plot(x,y_recruit,label="研究生招生數")
# 繪制第二條折線
plt.plot(x,y_graduate,
         label="研究生畢業生數",	    # 圖例顯示內容
         color="orange",             # 線條顏色
         linewidth=3,                # 線寬
         linestyle="--")             # 線條樣式

# 設置x軸刻度,rotation為旋轉度數
plt.xticks(x[::2],rotation=45)

# 設置圖例,prop為設置字體,fontsize為設置字體大小
plt.legend(prop=my_font,fontsize=12)

# 繪制網格,alpha為透明度
plt.grid(alpha=0.5)

# 添加描述信息,fontproperties為設置字體,fontsize為設置字體大小
plt.xlabel("年份",fontproperties=my_font,fontsize=12)
plt.ylabel("人數(萬人)",fontproperties=my_font,fontsize=12)
plt.title("1978年至2017年研究生招生數和研究生畢業生數情況",fontproperties=my_font,fontsize=18)

# 顯示圖形
plt.show()

1.4 繪制圖形結果

運行上述代碼,結果如下。

2.條形圖

2.1 什么是條形圖

以下引用自百度百科

條形圖(bar chart)是用寬度相同的條形的高度或長短來表示數據多少的圖形。條形圖可以橫置或縱置,縱置時也稱為柱形圖(column chart)。此外,條形圖有簡單條形圖、復式條形 圖等形式。

簡單來說,條形圖可以直觀地反映數據的大小。

2.2 准備數據

數據同樣來自國家數據,選取了2009年、2010年和2011年各級各類學校數,具體數據如下。

2009 2010 2011
普通高等學校數(所) 2305 2358 2409
普通中學學校數(所) 70774 68881 67751
高中學校數(所) 14607 14058 13688
初中學校數(所) 56167 54823 54063
職業中學學校數(所) 5805 5273 4856
普通小學學校數(所) 280184 257410 241249
特殊教育學校學校數(所) 1672 1706 1767
學前教育學校數(所) 138209 150420 166750
2.3 繪制完善圖形

代碼如下:

x = ["普通高等學校數", "普通中學學校數","高中學校數",
	 	"初中學校數","職業中學學校數","普通小學學校數",
	 	"特殊教育學校數","學前教育學校數"]
y_09 = [2305,70774,14607,56167,5805,280184,1672,138209]
y_10 = [2358,68881,14058,54823,5273,257410,1706,150420]
y_11 = [2409,67751,13688,54063,4856,241249,1767,166750]

plt.figure(figsize=(10,6.18),dpi=100)
bar_width = 0.25

x_09 = list(range(len(x)))
x_10 = list(i + bar_width for i in range(len(x)))
x_11 = list(i + bar_width * 2 for i in range(len(x)))

plt.barh(x_09,y_09,height=bar_width,label="2009年")
plt.barh(x_10,y_10,height=bar_width,label="2010年")
plt.barh(x_11,y_11,height=bar_width,label="2011年")

plt.legend(prop=my_font, fontsize=12)
plt.grid(alpha=0.5,linestyle="--")
plt.yticks(x_10,x,fontproperties=my_font)
plt.xlabel("數量(所)",fontproperties=my_font,fontsize=12)
plt.title("2009年、2010年及2011年各級各類學校數情況",fontproperties=my_font,fontsize=18)

plt.show()
2.4 繪制圖形結果

運行上述代碼,結果如下。

3.直方圖

3.1 什么是直方圖

以下引用自百度百科

直方圖(Histogram)又稱質量分布圖。是一種統計報告圖,由一系列高度不等的縱向條紋或線段表示數據分布的情況。 一般用橫軸表示數據類型,縱軸表示分布情況。
為了構建直方圖,第一步是將值的范圍分段,即將整個值的范圍分成一系列間隔,然后計算每個間隔中有多少值。 這些值通常被指定為連續的,不重疊的變量間隔。 間隔必須相鄰,並且通常是(但不是必須的)相等的大小。

3.2 准備數據

數據選用上一篇隨筆:爬取豆瓣電影信息中爬取到的電影的時長。去除無效數據后,從下圖可以看出總共有2247條數據,最大值為170,最小值為3。

3.3 繪制完善圖形

代碼如下:

plt.figure(figsize=(10,6.18),dpi=100)

plt.hist(df["running_time"],range(0,171,10),color="#009900")

plt.xticks(range(0,171,10))
plt.yticks(range(0,650,50))

plt.grid(alpha=0.5,linestyle="--")

plt.xlabel("時長(分鍾)",fontproperties=my_font,fontsize=12)
plt.ylabel("數量", fontproperties=my_font,fontsize=12)
plt.title("電影片長分布情況", fontproperties=my_font,fontsize=18)

plt.show()
3.4 繪制圖形結果

運行上述代碼,結果如下。

四、結語

  • 本文簡單舉例介紹了matplotlib繪制折線圖、條形圖和直方圖的方法,matplotlib很強大,可以繪制非常多的圖形,可以參考https://matplotlib.org/gallery/index.html
  • 如果文中有錯誤的地方,希望大家指出,我會積極地學習改正。
  • 最后,感謝大家的閱讀!

開心一點,人間不值得


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM