matplotlib庫——5分鐘入門,帶你詳細瞭解

来源:https://www.cnblogs.com/python0921/archive/2020/06/17/13154802.html
-Advertisement-
Play Games

前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 Matplotlib 是一個 Python 的 2D繪圖庫(當然也可以畫三維形式的圖形哦),它以各種硬拷貝格式和跨平臺的互動式環境生成出版質量級別的圖形 。通過 Matplo ...


前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

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

Matplotlib 主要有兩大模塊:pyplot 和 pylab,這二者之間有何區別和聯繫呢?

首先 pyplot 和 pylab 都可以畫出圖形,且兩者 API 也是類似的, 其中 pylab 包括了許多 numpy 和 pyplot 模塊中常用的函數,對互動式使用(如在 IPython 互動式環境中)來說比較方便,既可以畫圖又可以進行計算,不過官方推薦對於項目編程最好還是分別導入 pyplot 和 numpy 來作圖和計算。

先來個簡單的

import numpy as np
from matplotlib import pyplot as plt


x = np.arange(0, 11)
y = 2*x
plt.plot(x, y, marker='o')
plt.show()

 

同一幅圖中多條線

x = np.arange(0, 11)
y1 = 2*x
y2 = 4*x
# g-- 表示綠色虛線  r- 表示紅色實線
plt.plot(x, y1, 'g--') 
plt.plot(x, y2, 'r-')
plt.show()

 

Matplotlib Api 風格

Matplotlib 有兩種編程風格,一種是 Matlab 用戶熟悉的風格,一種是面向對象式的風格,推薦後者

Matlab 風格的 Api

plt.figure(figsize=(10, 5))
x = [1, 2, 3]
y = [2, 4, 6]
plt.plot(x, y, 'r')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.title('figure title')
plt.show()

 

面向對象風格的 Api

fig = plt.figure(figsize=(10, 5))
# add_subplot(nrows, ncols, index, **kwargs) 預設 (1, 1, 1)
axes = fig.add_subplot()
x = [1, 2, 3]
y = [2, 4, 6]
axes.plot(x, y, 'r')
axes.set_xlabel('x axis')
axes.set_ylabel('y axis')
axes.set_title('figure title')
plt.show()

 

都得到以下圖形

多個子圖

fig: plt.Figure = plt.figure(figsize=(10, 5))
axes1 = fig.add_subplot(2, 1, 1)  # (nrows, ncols, index)
# 與 axes1 共用x,y軸
# the axis will have the same limits, ticks, and scale as the axis
# facecolor: 坐標軸圖形背景顏色
axes2 = fig.add_subplot(2, 1, 2, sharex=axes1, sharey=axes1, facecolor='k')
x = np.linspace(-5, 5, 100)
y1 = np.sin(x)
y2 = np.cos(x)
axes1.plot(x, y1, color='red', linestyle='solid')
axes2.plot(x, y2, color='#00ff00', linestyle='dashed')
axes1.set_title('axes1 title')
axes2.set_title('axes2 title')
plt.show()

 

# 設置圖的位置、大小
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # [left, bottom, width, height]
axes2 = fig.add_axes([0.7, 0.7, 0.2, 0.2])

 

對象關係

在 matplotlib 中,整個圖像為一個 Figure 對象。在 Figure 對象中可以包含一個,或者多個 Axes 對象,每個 Axes 對象都是一個擁有自己坐標系統的繪圖區域。

Title——標題
Axis——坐標軸
Label——坐標軸標註
Tick——刻度線
Tick Label——刻度註釋

設置樣式

設置圖形樣式時可參考以下表

axes.plot(x, y, color='red', linestyle='solid', marker='o')

顏色

 

簡寫形式

 

線類型

 

點標記

只列出了常用的(只支持簡寫形式)

圖例

axes.plot(x, y, 'r', label='y=2x')
# or
axes.set_label('y=2x')
axes.legend(loc='upper right')  # 預設 legend(loc='best')
# 同時設置多個
plt.legend((axes1, axes2, axes3), ('label1', 'label2', 'label3'))

 

 

調整坐標軸的上下限

# xlim(left=None, right=None, emit=True, auto=False, *, xmin=None, xmax=None) 
# ylim(bottom=None, top=None, emit=True, auto=False, *, ymin=None, ymax=None) 
axes.set_xlim(0, 8)
axes.set_ylim(0, 8)

 

直至坐標軸顯示間隔

from matplotlib.ticker import MultipleLocator
# 如設置主要刻度線間隔為 2
axes.xaxis.set_major_locator(MultipleLocator(2))

 

調整坐標軸標簽的顯示

# 當點比較密集時,x 軸刻度線標簽可能會重疊在一起,尤其是時間時
# 1. 對於時間可以使用 autofmt_xdate 自動調整對齊和旋轉
fig.autofmt_xdate()
# 2. 通用的
ax.set_xticklabels(xticks, rotation=30, ha='right')

# 對於日期顯示還可以自定義格式
from matplotlib.dates import DateFormatter
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))

 

設置坐標軸名稱

# 坐標軸下方或左邊顯示的標簽
ax.set_xlabel('Time Series')
ax.set_ylabel('Microseismicity')

 

綜合示例

fig = plt.figure()
axes = fig.add_subplot()

t = np.linspace(0, np.pi, 64)
x = np.sin(t)
y = np.cos(t) + np.power(x, 2.0 / 3)
# 採用參數定義樣式
axes.plot(x, y, color='red', marker='o', linestyle='solid', linewidth=2, label='x>0')
# 採用簡寫 color marker linestyle 沒有順序之分,不需要都寫
axes.plot(-x, y, 'ro-', linewidth=2, label='x<0')
# 設置標題
axes.set_title('心型圖', fontdict={'size': 16, 'color': 'r', 'family': 'SimHei'})
# 設置坐標軸數值範圍
axes.set_xlim(-1.5, 1.5)
# 設置坐標軸刻度線
axes.set_xticks([-1.5, -1, 0, 1, 1.5])
# 設置坐標軸刻度線標簽,不設置則是坐標軸數值
axes.set_xticklabels(['-1.5', '-1', '原點', '1', '1.5'], fontdict={'family': 'SimHei'})
# 設置顯示圖例
axes.legend()
# 設置顯示網格線
axes.grid(color='#cccccc', ls='-.', lw=0.25)

plt.show()

 

一些配置項

# 使用 pycharm 運行 plt.show() 預設不在獨立視窗顯示(terminal 運行可以)
# 切換 backend 為 TkAgg 時, pycharm 運行可以在獨立視窗展示圖,同時 terminal 運行也可以
# 預設 non-interactive backends = agg
# 如果不切換 backend 又想在獨立視窗顯示,可以按如下設置
# File -> Settings -> Tools -> Python Scientific -> 去掉Show plots in tool window勾選
plt.switch_backend('TkAgg')

# 當 figure 開啟超過 20 個時會有警告(一般迴圈畫圖出現),可以主動 close 圖
for y in data:
    fig: plt.Figure = plt.figure()
    axes = fig.add_subplot()
    axes.plot(y, color='red', marker='o', linestyle='solid')
    plt.savefig('xxx.png')
    plt.close()


# 設置網格線
plt.grid(True)

# 設置字體,預設不支持中文顯示,可以指定中文字體來顯示中文
plt.rcParams["font.family"] = 'SimHei'  # mac os可以使用 Heiti TC
# 也可以在使用的時候分別設置
axes.set_title('中文字體 SimHei', fontdict={'size': 16, 'color': 'r', 'family': 'SimHei'})

# 解決坐標軸負數的負號顯示問題
plt.rcParams['axes.unicode_minus'] = False

 

圖形類型

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 本人一直推崇寫流暢、自然、可自解釋的代碼,讓優雅成為一種習慣。 溫故而知新,聊一聊現代編程幾大常見的編程原則 普世原則 KISS (Keep It Simple Stupid) 保持系統結構簡單可信賴 YAGNI (you aren't gonna need it) 當前確實需要,再去做 Do Th ...
  • 模板方法是結構最簡單的行為型設計模式,在抽象類中定義了一個稱為模板方法的方法,在這個方法中定義其他基本方法的執行步驟,而基本方法的實現可以放在抽象類,也可以放在其子類 模式動機 現實生活中很多事情的完成過程都包含幾個基本步驟,例如請客吃飯,無論吃什麼,一般都包含點單、吃東西、買單幾個步驟,到底吃什麼 ...
  • 結合一些文章閱讀源碼後整理的Java容器常見知識點。對於一些代碼細節,本文不展開來講,有興趣可以自行閱讀參考文獻。 ...
  • 一、不同輸出格式會有不同的結果 1.%ld 用於long類型的值,如果系統中int和long大小相同,使用%d就可以,這樣的程式被移植到其他系統(int和long類型的大小不同)。 2.同樣x和o​前面也可以使用l來修飾。 3.對於short類型,前面就是使用h來​當首碼。 4.h和l首碼都可以和u ...
  • 關於變數的命名,這又是一個容易引發程式員論戰的話題。如何命名才能更具有可讀性、易寫性與明義性呢?眾說紛紜。 本期“Python為什麼”欄目,我們將聚焦於變數命名中的連接方式,來切入這塊是非之地,想要回答的問題是——Python 為什麼要推薦蛇形命名法? 首先一點,對於單個字元或者單詞 (例如:a、A ...
  • 最近也是在後臺收到很多小伙伴私信問我線程和線程池這一塊的問題,說自己在面試的時候老是被問到這一塊的問題,被問的很頭疼。前幾天看到後幫幾個小伙伴解決了問題,但是問的人有點多我一個個回答也回答不過來,乾脆花了一個上午時間寫了這篇文章分享給大家。話不多說,滿滿的乾貨都在下麵了! ...
  • 一、背景 隨著時間和業務的發展,資料庫中的數據量增長是不可控的,庫和表中的數據會越來越大,隨之帶來的是更高的磁碟、IO、系統開銷,甚至性能上的瓶頸,而一臺服務的資源終究是有限的,因此需要對資料庫和表進行拆分,從而更好的提供數據服務。 當用戶表達到千萬級別,在做很多操作的時候都會很吃力,所以當數據增長 ...
  • 1.數組基礎 數組的定義: 數組是相同類型數據的有序集合。數組描述的是相同類型的若幹數據,按照一定的先後次序排列組合而成的。 其中每一個數據成為元素,每個元素可以通過索引來訪問他們。 數組的三個基本特點: 1.長度確定,數組一旦被創建,它的大小就是不可以改變的。 2.其元素必須是相同類型,不允許出現 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...