1. 程式人生 > >matplotlib簡單示例

matplotlib簡單示例

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 繪製完善圖形

附上程式碼,看註釋吧。

<span style="color:#444444"><code><span style="color:#0000ff">from</span> matplotlib <span style="color:#0000ff">import</span> pyplot <span style="color:#0000ff">as</span> plt
<span style="color:#0000ff">from</span> matplotlib <span style="color:#0000ff">import</span> font_manager

<span style="color:green"># matplotlib預設不支援中文字元,設定中文字型,引數的值為系統字型路徑</span>
my_font = font_manager.FontProperties(fname=<span style="color:#a31515">r"C:\Windows\Fonts\simsun.ttc"</span>)

<span style="color:green"># 需要繪製的資料</span>
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]))

<span style="color:green"># 設定圖形大小,dpi</span>
plt.figure(figsize=(10,6.18),dpi=100)

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

<span style="color:green"># 設定x軸刻度,rotation為旋轉度數</span>
plt.xticks(x[::2],rotation=45)

<span style="color:green"># 設定圖例,prop為設定字型,fontsize為設定字型大小</span>
plt.legend(prop=my_font,fontsize=12)

<span style="color:green"># 繪製網格,alpha為透明度</span>
plt.grid(alpha=0.5)

<span style="color:green"># 新增描述資訊,fontproperties為設定字型,fontsize為設定字型大小</span>
plt.xlabel(<span style="color:#a31515">"年份"</span>,fontproperties=my_font,fontsize=12)
plt.ylabel(<span style="color:#a31515">"人數(萬人)"</span>,fontproperties=my_font,fontsize=12)
plt.title(<span style="color:#a31515">"1978年至2017年研究生招生數和研究生畢業生數情況"</span>,fontproperties=my_font,fontsize=18)

<span style="color:green"># 顯示圖形</span>
plt.show()
</code></span>

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 繪製完善圖形

程式碼如下:

<span style="color:#444444"><code>x = [<span style="color:#a31515">"普通高等學校數"</span>, <span style="color:#a31515">"普通中學學校數"</span>,<span style="color:#a31515">"高中學校數"</span>,
        <span style="color:#a31515">"初中學校數"</span>,<span style="color:#a31515">"職業中學學校數"</span>,<span style="color:#a31515">"普通小學學校數"</span>,
        <span style="color:#a31515">"特殊教育學校數"</span>,<span style="color:#a31515">"學前教育學校數"</span>]
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 <span style="color:#0000ff">for</span> i <span style="color:#0000ff">in</span> range(len(x)))
x_11 = list(i + bar_width * 2 <span style="color:#0000ff">for</span> i <span style="color:#0000ff">in</span> range(len(x)))

plt.barh(x_09,y_09,height=bar_width,label=<span style="color:#a31515">"2009年"</span>)
plt.barh(x_10,y_10,height=bar_width,label=<span style="color:#a31515">"2010年"</span>)
plt.barh(x_11,y_11,height=bar_width,label=<span style="color:#a31515">"2011年"</span>)

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

plt.show()</code></span>

2.4 繪製圖形結果

執行上述程式碼,結果如下。

3.直方圖

3.1 什麼是直方圖

以下引用自百度百科

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

3.2 準備資料

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

3.3 繪製完善圖形

程式碼如下:

<span style="color:#444444"><code>plt.figure(figsize=(10,6.18),dpi=100)

plt.hist(df[<span style="color:#a31515">"running_time"</span>],range(0,171,10),color=<span style="color:#a31515">"#009900"</span>)

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

plt.grid(alpha=0.5,linestyle=<span style="color:#a31515">"--"</span>)

plt.xlabel(<span style="color:#a31515">"時長(分鐘)"</span>,fontproperties=my_font,fontsize=12)
plt.ylabel(<span style="color:#a31515">"數量"</span>, fontproperties=my_font,fontsize=12)
plt.title(<span style="color:#a31515">"電影片長分佈情況"</span>, fontproperties=my_font,fontsize=18)

plt.show()</code></span>

3.4 繪製圖形結果

執行上述程式碼,結果如下。

四、結語

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