Matplotlib——繪制圖表

文章目錄

  • 通過figure()函數創建畫布
  • 通過subplot()函數創建單個子圖
  • 通過subplots()函數創建多個子圖
  • 通過add_subplot()方法添加和選中子圖
  • 添加各類標簽
  • 繪制常見圖表
    • 繪制直方圖——hist()函數
    • 繪制散點圖——scatter()函數
    • 繪制柱狀圖——bar()函數
  • 設定線條的相關參數
  • 本地保存圖片


通過figure()函數創建畫布

在pyolot模塊中,默認擁有一個Figure對象,該對象可以理解為一張空白的畫布,用于容納圖標的各種組件,比如圖例、坐標軸等。

figure(num=None, # autoincrement if None, else integer from 1-N
figsize=None, # defaults to rc figure.figsize
dpi=None, # defaults to rc figure.dpi
facecolor=None, # defaults to rc figure.facecolor
edgecolor=None, # defaults to rc figure.edgecolor
frameon=True,
FigureClass=Figure,
clear=False,
**kwargs
)

部分參數表示的含義如下:

  1. num:表示圖形的編號或名稱,數字代表編號,字符串表示名稱。如果沒有提供該參數,則會創建一個新的圖形,并且這個圖形的編號會增加;如果提供該參數,并且具有此id的圖形已經存在,則會將其激活并返回對其的引用,若此圖形不存在,則會創建并返回它。
  2. figsize:用于設置畫布的尺寸,寬度、高度以英寸為單位。
  3. dpi:設置圖形的分辨率。
  4. facecolor:用于設置畫板的背景顏色。
  5. edgecolor:用于顯示邊框原色。
  6. frameon:表示是否顯示邊框。
  7. FigureClass:派生自matplotlib.figure.Figure的類,可以選擇使用自定義的圖形對象。
  8. clear:若設為True且該圖形已經存在,則它會被清除。

創建新的畫布并返回Figure實例

figure_obj = plt.figure()
print(type(figure_obj))

輸出結果:

<class 'matplotlib.figure.Figure'>

用type()查看figure_obj對象的類型,可以看出其是一個Figure類的對象。

創建的新畫布:
在這里插入圖片描述


嘗試另創建一個背景顏色為灰色的新畫布,并在畫布上繪制一張折線圖:

import matplotlib.pyplot as plt
import numpy as npdata = np.arange(100, 201)
plt.figure(facecolor='gray')
plt.plot(data)
plt.show()

輸出結果:
在這里插入圖片描述
從輸出結果可以看出x軸的刻度范圍為0~100,y軸的刻度范圍為指定的數值區間。這是因為在調用plot()函數時,如果傳入了單個列表或數組,則會將其設為y軸序列,且自動生成x軸的序列。x軸的序列從0開始,與y軸序列具有相同的長度。


通過subplot()函數創建單個子圖

在同一個畫布上繪制多個圖形,Figure對象允許劃分為多個繪圖區域,每個繪圖區域都是一個Axes對象,它擁有屬于自己的坐標系統,被稱為子圖。

subplot(nrows, ncols, index, **kwargs)

參數表示的含義如下:

  1. nrows,ncols:表示子區網格的行數、列數。
  2. index:表示矩陣區域的索引。

subplot()函數會將整個繪圖區域等分為“nrows(行)× ncols(列)”的矩陣區域,之后按照從左到右、從上到下的順序對每個區域進行編號。從一開始依次遞增。

如果nrows, ncols, index這三個參數的值都小于10,則可以把它們簡寫為一個實數,如subplot(2,2,3)可以寫成subplot(223)。

創建單個子圖并在其上繪制簡單的圖形:

data = np.arange(100, 201)
plt.subplot(221)
plt.plot(data, data)
plt.subplot(2, 2, 2)
plt.plot(data, -data)
plt.subplot(212)
plt.plot(data, data*2)
plt.show()

輸出結果:

在這里插入圖片描述
通過subplot()函數可以規劃Figure對象劃分為多少個字圖,但每調用一次該函數只會創建單個子圖。


通過subplots()函數創建多個子圖

如果希望一次性創建一組子圖,則可以通過subplots()函數進行實現。

subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
subplot_kw=None, gridspec_kw=None, **fig_kw):

上述函數常用的參數含義如下:

  1. nrows,ncols:表示子區網格的行數、列數,默認為1。
  2. sharex,sharey:表示控制x或y軸是否共享。若設為“True”或“all”,則表示x或y軸在所有的子圖中共享;若設為“False”或“None”,則每個子圖的x或y軸是獨立的;若設為“row”,則每個子圖沿方向共享x軸或y軸;若設為“col”,則每個子圖沿方向共享x軸或y軸。

subplots()函數會返回一個元組,元組的第一個元素為Figure對象(畫布),第二個元素為Axes對象(子圖,包含坐標軸和畫的圖)或Axes對象數。如果創建的是單個子圖,則返回的是一個Axes對象,否則返回的是一個Axes對象數組。


創建4個子圖,并在每個子圖上繪制一些簡單的圖形:

# 生成包括100~200之間所有整數的數組
data = np.arange(100, 201)# 分成2*2的矩陣區域,返回子圖數組axes
fig, axes = plt.subplots(2, 2)
ax1 = axes[0, 0]
ax2 = axes[0, 1]
ax3 = axes[1, 0]
ax4 = axes[1, 1]
# 再選中的子圖上作圖
ax1.plot(data, data)
ax2.plot(data, -data)
ax3.plot(data, data**2)
ax4.plot(data, np.log(data))
plt.show()

輸出結果:

在這里插入圖片描述


通過add_subplot()方法添加和選中子圖

想要創建子圖,除了使用pyplot模塊的函數之外, 還可以通過Figure類的add_subplot()方法添加和選中子圖。

add_subplot(self, *args, **kwargs)

上述方法中,*args參數表示一個三位數的實數或三個獨立的實數,用于描述子圖的位置。(具體用法類似于subplot()函數中的nrows, ncols, index參數。)

注意: 每調用一次add_subplot()方法會規劃畫布劃分子圖,但只會添加一個子圖。當調用plot()函數繪制圖形時,會畫在最后一次指定子圖的位置上。


創建具有兩行兩列的矩陣區域,且在編號為2的子圖上繪制圖形:

# 通過add_subplot()方法添加和選中子圖
fig = plt.figure()
# 添加子圖
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 4)
fig.add_subplot(223)
fig.add_subplot(2, 2, 2)
# 在子圖上作圖,randn函數返回一個或一組樣本,具有標準正態分布。
random_arr = np.random.randn(100)
# 默認是在最后一次使用subplot的位置上作圖,即編號為3的位置
plt.plot(random_arr)
plt.show()

輸出結果:
在這里插入圖片描述
上述示例中,首先創建了Figure類對象fig,然后調用add_subplot()方法將fig對象化分為一個2行2列的矩陣區域,且將圖形繪制在最后選中的編號為2的子區域上,調用plot()函數根據創建的隨機數組繪制折線圖。


添加各類標簽

圖表添加標簽和圖例的常用函數

函 數 名 稱說 明
title()設置當前軸的標題
xlabel()設置當前圖形x軸的標簽名稱
ylabel()設置當前圖形y軸的標簽名稱
xticks()指定x軸刻度的數目與取值
yticks()指定y軸刻度的數目與取值
xlim()設置或獲取當前圖形x軸的范圍
ylim()設置或獲取當前圖形y軸的范圍
legend()在軸上放置一個圖例

表中的函數之間是并列關系,沒有先后順序,既可以先繪制圖形,也可以先添加標簽。當然,添加圖例只能在繪制完成之后。


在使用Matplotlib繪圖時,如果要設置的圖標標題中有中文字符,則會變成方格子而無法正確顯示。
在這里插入圖片描述
實際上Matplotlib是支持中文編碼的,出現這種情況主要是因為Matplotlib庫的配置信息里面沒有中文字體的相關信息,這是可以采用以下方式進行解決:

在python腳本中動態設置matplotlib,這樣就可以避免由于更改配置文件而造成的麻煩。
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 設置顯示中文字體
另外,由于字體更改以后會導致坐標軸中部分字符無法正常顯示,這是需要更改axes.unicode_minus參數。
mpl.rcParams['axes.unicode_minus'] = False  # 設置正常顯示符號

代碼實現:

# 添加各類標簽
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 設置顯示中文字體
mpl.rcParams['axes.unicode_minus'] = False  # 設置正常顯示符號
data1 = np.arange(0, 1.8, 0.1)
plt.title("陳丑丑的身高體重數據")  # 添加標題
plt.xlabel("length")  # x軸名稱
plt.ylabel("weight")  # y軸名稱
plt.xticks(np.arange(0, 1.8, step=0.1))
plt.yticks(np.arange(0, 66, step=4))
plt.plot(data1, (data1**2)*20)  # 繪制y=(x^2)*20曲線
plt.legend(["y=(x^2)*20"])  # 添加圖例
plt.show()

輸出結果:
在這里插入圖片描述


繪制常見圖表

繪制直方圖——hist()函數

hist(
x, bins=None, range=None, density=False, weights=None,
cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’,
orientation=‘vertical’, rwidth=None, log=False, color=None,
label=None, stacked=False, *, data=None, **kwargs)

上述函數中常用參數表示的含義如下:

  1. x:表示輸入值,可以是單個數組,或者是不需要相同長度的數組序列。
  2. bins:表示繪制條柱的個數,默認為10。
  3. range:bins的上下范圍(最大和最小值)。
  4. color:表示條柱的顏色,默認為None。

代碼實現:

arr_random = np.random.randn(100)
plt.hist(arr_random, bins=8, color='m', alpha=0.5)  # alpha用于設置顏色深度——透明度
plt.show()

輸出結果:
在這里插入圖片描述
上述示例中,首先創建了一個包含100個隨機數的數組,用來表示繪制圖形使用的數據,接著調用hist()函數繪制一個直方圖,這個直方圖共有8個條柱,每個條柱的顏色為品紅,透明度alpha為0.5。


繪制散點圖——scatter()函數

scatter(
x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
verts=cbook.deprecation._deprecated_parameter,
edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

上述函數中常用參數表示的含義如下:

  1. x,y:表示x軸和y軸對應的數據。
  2. s:指定散點的大小。若傳入的是一維數組,則表示每個點的大小。
  3. c:指定散點的顏色。若傳入的是一維數組,則表示每個點的顏色。
  4. marker:表示繪制的散點類型。
  5. alpha:表示點的透明度,取值0~1之間。

代碼實現:

# 繪制散點圖
x = np.arange(21)
y = np.random.rand(21)*10
plt.scatter(x, y, c='g', marker='*')
plt.show()

輸出結果:
在這里插入圖片描述
上述示例中,首先創建了一個包含整數0 ~ 20的數組,這些數值將作為散點圖中x軸對應的數據。其次創建了含有21個0 ~ 1之間的隨機數的數組,將它們乘以10的結果作為y軸對應的數據。散點的類型為星形。【關于線條的相關參數設置在本篇篇尾】


繪制柱狀圖——bar()函數

bar(
x, height, width=0.8, bottom=None, *, align=‘center’,
data=None, **kwargs)

上述函數中常用參數表示的含義如下:

  1. x:表示x軸的數據。
  2. height:表示條形的高度。
  3. width:表示條形的寬度,默認為0.8。
  4. color:表示條形的顏色。
  5. edgecolor:表示條形邊框的顏色。

代碼實現:

# 繪制柱狀圖
x1 = np.arange(5)
# 從上下限范圍內隨機選取整數,創建兩個2行5列的數組
y1, y2 = np.random.randint(1, 91, size=(2, 5))
ax = plt.subplot(222)  # 創建一個子圖
width = 0.25  # 條形的寬度
ax.bar(x1, y1, width=width, color='r')  # 繪制紅色的柱形圖
ax.bar(x1+width, y2, width=width, color='g')  # 繪制另一個綠色的柱形圖
ax.set_xticks(x1+0.1)  # 設置x軸的刻度
ax.set_xticklabels(['a', 'b', 'c', 'd', 'e'])  # 設置x軸的標簽
plt.show()

輸出結果:
在這里插入圖片描述
上述示例中,首先創建了包含整數0 ~ 4的數組,將其作為x軸的數據;接著又創建了兩個2行5列的二維數組,它們的數據是從1 ~ 30內隨機選取的整數,然后再指定編號為2的子圖上,調用bar()函數繪制了兩個柱形圖。第一個柱形圖x,y軸的數據設為x1、y1,顏色為紅色。第二個柱形圖x,y軸使用的數據為x+width和y2,顏色為綠色,最后設置了x軸的刻度標簽為“a、b、c、d、e”。


設定線條的相關參數

線條顏色使用color參數控制

顏 色 值說 明
b(blue)藍色
g(green)綠色
r(red)紅色
c(cyan)青色
m(magenta)品紅
y(yellow)黃色
k(black)黑色
w(white)白色

標記風格使用marker參數控制

標記風格值說 明
o實心圓圈
D菱形
h六邊形1
H六邊形2
8八邊形
p五邊形
+加號
.
s正方形
*星形
v倒三角形
^正三角形
>一角朝右的三角形
<一角朝左的三角形

線型使用linestyle參數控制

線型值說明
-實線
長虛線
-.短點相間線
:短虛線

代碼示例:

data2 = np.arange(1, 3, 0.3)
plt.plot(data2, marker="x", linestyle='--')
plt.plot(data2+1, marker='o', linestyle=':')
plt.plot(data2+2, color='k', marker='s', linestyle='-.')

輸出結果:
在這里插入圖片描述

代碼示例:

# 等價于
plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')

輸出結果:
在這里插入圖片描述


本地保存圖片

想要保存當前生成的圖表,可以調用savefig()函數進行保存。

savefig(*args, **kwargs)

上述函數中,有fname參數——一個包含文件名路徑的字符串,或者是一個類似于Python文件的對象。
如果format參數設為None且fname參數是一個字符串,則輸出格式將根據文件名的擴展名推導出來。

使用savefig()函數將圖片保存在指定的目錄下,具體代碼實現如下(在show()函數錢插入):

data2 = np.arange(1, 3, 0.3)
plt.plot(data2, marker="x", linestyle='--')
plt.plot(data2+1, marker='o', linestyle=':')
plt.plot(data2+2, color='k', marker='s', linestyle='-.')
# 等價于
plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')# 本地保存圖片
plt.savefig(r"D:\數據分析\demo.png")
plt.show()
print("over!")

輸出結果:
在這里插入圖片描述
在操作完成后使用print(“over!”)輸出上圖結果作為執行結束提示。

可以從相應路徑中打開文件以檢查是否成功保存。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443842.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443842.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

限制在同一臺電腦上只允許有一個用戶登錄系統

在web應用系統中&#xff0c;出于安全性考慮&#xff0c;經常需要對同一客戶端登錄的用戶數量和一個客戶同時在多個客戶端登陸進行限制。 具體一點就是&#xff1a; 1、在同一臺電腦上一次只允許有一個用戶登錄系統&#xff1b; 2、一個用戶在同一時間只允許在一個客戶端登錄…

Seaborn——繪制統計圖形

文章目錄可視化數據的分布繪制單變量分布繪制雙變量分布繪制成對的雙變量分布用分類數據繪圖類別散點圖通過stripplot()函數畫散點圖swarmplot()函數類別內的數據分布繪制箱型圖繪制提琴圖類別內的統計估計繪制條形圖繪制點圖可視化數據的分布 繪制單變量分布 一般采用最簡單…

Bokeh——交互式可視化庫

文章目錄前言如何通過Plotting繪制圖形前言 Bokeh是一個專門針對Web瀏覽器使用的交互式可視化庫&#xff0c;這是與其他可視化庫相比最核心的區別。 如何通過Plotting繪制圖形 Plotting是以構建視覺符號為核心的接口&#xff0c;可以結合各種視覺元素&#xff08;例如&#x…

指針、引用以及const限定符、constexpr限定符

文章目錄復合類型引用概念與使用引用的定義注意指針概念聲明方式取地址符指針值空指針利用指針訪問對象賦值和指針void* 指針指向指針的指針指向指針的引用初始化所有指針有多重含義的某些符號const限定符概念const的引用指針和const頂層const和底層constconstexpr和常量表達式…

關鍵字typedef、關鍵字using、auto類型說明符和declytpe類型指示符

文章目錄類型別名概念關鍵字 typedef別名聲明 (alias declaration) using指針、常量和類型別名類型別名簡化多維數組指針auto類型說明符概念復合類型、常量和autodecltype類型指示符概念decltype和引用類型別名 概念 有兩種方法可用于定義類型別名。 關鍵字 typedef typede…

初始化、賦值、默認初始化、列表初始化、類內初始值、直接初始化與拷貝初始化

文章目錄初始化和賦值的區別什么是默認初始化&#xff1f;列表初始化列表初始化的使用場景不適合使用列表初始化的場景類內初始值混用string對象和C風格字符串數組與vector對象關于vector對象兩者間的初始化關系直接初始化與拷貝初始化初始化和賦值的區別 初始化的含義是創建變…

js動態增加,刪除td,tr,table,div

js實現的動態添加&#xff0c;刪除table內容&#xff1a; 截圖如下&#xff1a; 1. 2. 源代碼&#xff1a; main.css body {background-image: url(../images/qiantai/bg.png);font-family: arial;font-size: 12px;color: #d4d7da;text-align: center;background-repeat: r…

string類的相關知識及部分操作

文章目錄string對象的初始化string::size_type類型string對象的讀寫操作使用標準庫中的iostream使用getline讀取一整行string對象的比較操作string對象的相加操作兩個string對象相加字面值和string對象相加string對象的初始化 拷貝初始化(copy initialization)&#xff1a;使用…

數組的部分練習

3.27&#xff1a;假設txt_size是一個無參數的函數&#xff0c;它的返回值是int。請回答下列哪個定義是非法的&#xff1f;為什么&#xff1f; unsigned buf_size1024; &#xff08;a&#xff09;int ia[buf_size];  &#xff08;b&#xff09;int ia[4*7-14]; &#xff08…

關于范圍for語句的使用

文章目錄使用范圍for語句處理多維數組使用范圍for語句處理多維數組 舉個例子&#xff0c;使用范圍for語句輸出多維數組&#xff08;ia&#xff09;所有值&#xff1a; for (const auto &row : ia)for (auto col : row)cout << col << endl;本循環中并沒有任何…

vector的應用練習

文章目錄編寫一段程序&#xff0c;使用條件運算符從vector< int >中找出哪些元素的值是奇數&#xff0c;然后將奇數值翻倍。 #include <iostream> #include <ctime> #include <vector> using namespace std; typedef int int_array[4]; int main() {v…

sizeof運算符運算結果小匯

文章目錄sizeof運算符的結果部分地依賴于其作用的類型sizeof運算符的結果部分地依賴于其作用的類型 對char或者類型為char的表達式執行sizeof運算&#xff0c;結果得1對引用類型執行sizeof運算得到被引用對象所占空間的大小對指針執行sizeof運算得到指針本身所占空間的大小對解…

jQuery實現復選框的全選和反選:

jQuery實現復選框的全選和反選&#xff1a; 截圖如下&#xff1a; 代碼如下&#xff1a; index.jsp: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath…

C語言隱式/顯式類型轉換 | C++四種強制類型轉換、類的隱式轉換、explicit

文章目錄C語言類型轉換隱式類型轉換顯式類型轉換C 強制類型轉換static_castreinterpret_castconst_castdynamic_cast類的隱式類型轉換概念只允許一步類類型轉換explicit 抑制構造函數定義地隱式轉換可以通過顯式轉換使用explicit構造函數C語言類型轉換 隱式類型轉換 編譯器在…

string對象和C風格字符串

混用string對象和C風格字符串 我們都知道允許使用字符串字面值來初始化string對象&#xff1a; string s("Hello World!");C規定&#xff0c;任何出現字符串字面值的地方都可以用以空字符結束的字符數組來替代&#xff1a; 允許使用以空字符結束的字符數組來初始化…

函數重載、引用再探、內聯函數

文章目錄函數重載為什么C支持重載&#xff0c;C語言不支持呢&#xff1f;extern “C”引用再探引用的特性引用的使用場景引用和指針引用和指針的不同點:內聯函數什么是內聯函數&#xff1f;內聯函數的特性內聯函數的好處類的內聯成員函數的聲明內聯函數的使用constexpr函數概念…

類的概念、成員函數的定義方式、類的訪問控制和封裝、類的大小、this指針

文章目錄類的概念structclassclass和struct的區別是什么呢&#xff1f;類中成員函數的兩種定義方式聲明和定義都在類中聲明和定義分離類的訪問控制和封裝類的封裝特性類的大小結構體內存對齊規則類的存儲方式this指針類的概念 在C中&#xff0c;類可以說是最重要的東西&#x…

jQuery實現兩個列表框的值之間的互換:

jQuery實現兩個列表框的值之間的互換&#xff1a; 截圖如下&#xff1a; 代碼如下&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath reque…

類的6個默認成員函數:構造函數、析構函數、拷貝構造函數、重載運算符、三/五法則

文章目錄6個默認成員函數構造函數概念默認構造函數的類型默認實參概念默認實參的使用默認實參聲明全局變量作為默認實參某些類不能依賴于編譯器合成的默認構造函數第一個原因第二個原因第三個原因構造函數初始化構造函數里面的“”是初始化嗎&#xff1f;為什么要使用列表初始化…

C++ 類的知識 | 構造函數再探、匿名對象、友元函數、內部類、類的const成員、類的static成員

文章目錄構造函數再探以下代碼共調用多少次拷貝構造函數委托構造函數概念形式匿名對象友元友元的聲明友元類令成員函數作為友元函數重載和友元注意內部類特性類的const成員可變數據成員類的static成員概念關于static靜態成員的類內初始化靜態成員能用于某些普通成員不能的場景構…