一、簡介 以下引用自百度百科 Matplotlib 是一個 Python 的 2D繪圖庫,它以各種硬拷貝格式和跨平臺的互動式環境生成出版質量級別的圖形 。 通過 Matplotlib,開發者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。 二、流程 1. 明確要研究的問 ...
一、簡介
以下引用自百度百科
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。
- 如果文中有錯誤的地方,希望大家指出,我會積極地學習改正。
- 最後,感謝大家的閱讀!
開心一點,人間不值得