matplotlib簡單示例

  • 2020 年 1 月 20 日
  • 筆記

一、簡介

以下引用自百度百科

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:WindowsFontssimsun.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。
  • 如果文中有錯誤的地方,希望大家指出,我會積極地學習改正。
  • 最後,感謝大家的閱讀!

開心一點,人間不值得

Tags: