matplotlib簡單示例

来源:https://www.cnblogs.com/dblsha/archive/2018/12/13/10111889.html
-Advertisement-
Play Games

一、簡介 以下引用自百度百科 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
  • 如果文中有錯誤的地方,希望大家指出,我會積極地學習改正。
  • 最後,感謝大家的閱讀!

開心一點,人間不值得


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、Node.js簡介 簡單的說 Node.js 就是運行在服務端的 JavaScript。Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境。Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Node.js 的包管理器 npm,是全球 ...
  • 如何學好面向對象? 面向對象雖然只有三個特性,封裝、繼承、多態,但是真正面向對象卻是說的容易做起來困難。但是,還是有一定的規則可尋的, 要學好面向對象,必須掌握設計模式 。 什麼是設計模式? 設計模式(Design pattern):是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結 ...
  • 本文介紹了Java驗證的幾種機制,包括JPA驗證,Bean驗證,實體監聽器和事務監聽器。通過介紹希望可以在Java項目整體的驗證方面提供一些參考。 ...
  • 解釋器模式是一種不很常用的模式,但是比如正則表達式就是一種解釋器模式的思維,所以儘管實際編碼中不常用,理解解釋器模式的含義很重要,本文對解釋器模式進行了簡單的介紹,並且給出了Java代碼示例,介紹瞭解釋器模式的意圖結構。 ...
  • 領域驅動設計理解&總結 這篇文章主要是通讀《實現領域驅動設計》之後自己的理解和總結(同時也參照一些博文的分析來加深自己的理解); 有些疑問是自定義內容,雖然有自己的理解,但依然感覺較為抽象,後續會通過實踐來理解其中的精妙之處。 ...
  • 前言 開心一刻 今天上課不小心睡著了,結果被老師叫起來回答問題,這是背景。無奈之下看向同桌尋求幫助,同桌小聲說到選C,結果周圍的人都說選C,向同桌投去一個感激的眼神後大聲說道選C。剛說完教室就笑開了,老師一臉恨鐵不成鋼的表情說選你個頭,我叫你翻譯文言文你選C!你出去,你給我出去。看著同桌擠眉弄眼的表 ...
  • 什麼是scrapy? scrapy是一個為了爬去網站數據,提取結構性數據而編寫的應用框架,我們只需要實現少量的代碼,就能夠快速的抓取 scrapy使用了 Twisted 非同步網路框架,可以加快我們的下載速度 非同步和非阻塞的區別 非同步:調用在發佈之後,這個調用就直接返回,不管有無結果 非阻塞:關註的是 ...
  • 過濾器模式 一、什麼是過濾器模式   過濾器模式(Filter Pattern),這種模式允許開發人員使用不同的標準來過濾一組對象,通過邏輯運算以解耦的方式把它們連接起來。這種類型的設計模式屬於結構型模式,它結合多個標準來獲得單一標準。 二、具體實現 1、主要角色 過濾對象:需要 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...