Matplotlib(二)- Matplotlib簡單繪圖

文章目錄

  • 一、pyplot模塊介紹
  • 二、Matplotlib簡單繪圖
    • 1. 繪制折線圖
      • 1.1 折線圖介紹
      • 1.2 plt.plot()函數介紹
      • 1.3 繪制簡單折線圖
        • 1.3.1 繪制單條折線圖
        • 1.3.2 繪制多條折線圖
      • 1.4 示例:繪制天氣氣溫折線圖
    • 2. 繪制柱形圖
      • 2.1 柱形圖介紹
      • 2.2 plt.bar()函數介紹
      • 2.3 繪制柱形圖
        • 2.3.1 繪制簡單柱形圖
        • 2.3.2 繪制分區柱形圖
        • 2.3.3 繪制堆積柱形圖
      • 2.4 示例:繪制國內生產總值柱形圖
    • 3. 繪制條形圖
      • 3.1 條形圖介紹
      • 3.2 plt.barh()函數介紹
      • 3.3 繪制條形圖
        • 3.3.1 繪制簡單條形圖
        • 3.3.2 繪制分區條形圖
        • 3.3.3 繪制堆積條形圖
      • 3.4 示例:繪制網購替代率條形圖
    • 4. 繪制堆積面積圖
      • 4.1 堆積面積圖介紹
      • 4.2 plt.stackplot()函數介紹
      • 4.3 繪制堆積面積圖
      • 4.4 示例:繪制物流公司物流費用堆積面積圖
    • 5. 繪制直方圖
      • 5.1 直方圖介紹
      • 5.2 plt.hist()函數介紹
      • 5.3 繪制直方圖
      • 5.4 示例:繪制薪資分布直方圖
    • 6. 繪制餅圖
      • 6.1 餅圖介紹
      • 6.2 plt.pie()函數介紹
      • 6.3 繪制餅圖
        • 6.3.1 繪制餅圖
        • 6.3.2 繪制圓環圖
      • 6.4 示例:繪制賬單餅圖
    • 7. 繪制散點圖
      • 7.1 散點圖和氣泡圖介紹
      • 7.2 plt.scatter()函數介紹
      • 7.3 繪制散點圖
        • 7.3.1 繪制散點圖
        • 7.3.2 繪制氣泡散點圖
      • 7.4 示例:繪制車速與制動距離散點圖
    • 8. 繪制箱形圖
      • 8.1 箱形圖介紹
      • 8.2 plt.boxplot()函數介紹
      • 8.3 繪制箱形圖
      • 8.4 示例:繪制發電量箱形圖
    • 9. 繪制雷達圖
      • 9.1 雷達圖介紹
      • 9.2 plt.polar()函數介紹
      • 9.3 繪制雷達圖
      • 9.4 示例:繪制霍蘭德職業興趣測試雷達圖
    • 10. 繪制誤差棒圖
      • 10.1 誤差棒圖介紹
      • 10.2 plt.errorbar()函數介紹
      • 10.3 繪制誤差棒圖
      • 10.4 示例:繪制城市人口增長誤差棒圖


一、pyplot模塊介紹

在 Matplotlib 的世界里,pyplot 模塊就像是一把功能強大的繪圖瑞士軍刀,是我們進行數據可視化操作時最常用的接口。它提供了一套與 MATLAB 類似的繪圖函數集合,讓開發者能夠以簡單直觀的方式創建各種類型的圖表。?

pyplot 模塊的設計理念是將繪圖過程分解為一系列簡單的步驟,通過調用不同的函數來逐步構建圖表。從創建畫布、繪制圖形元素,到設置坐標軸、添加標題和圖例,再到保存或顯示圖表,每一個環節都有對應的函數可供使用。?

使用 pyplot 模塊時,它會自動管理當前的圖形和繪圖區域,我們無需過多關注底層的對象創建和管理細節,只需專注于數據的呈現方式。比如,當我們調用plt.plot()函數時,它會在當前的繪圖區域中繪制線條;調用plt.xlabel()則會為當前圖表的 x 軸添加標簽。這種簡潔的操作方式使得即使是初學者,也能快速上手并繪制出具有一定專業性的數據圖表。?

同時,pyplot 模塊還支持對圖表的各種樣式進行精細調整,包括顏色、線型、標記點、字體大小等,讓我們能夠根據實際需求打造出美觀且信息清晰的可視化效果。接下來,我們就將運用 pyplot 模塊來繪制各種簡單的圖表。


二、Matplotlib簡單繪圖

1. 繪制折線圖

1.1 折線圖介紹

折線圖是一種以線條的起伏來展示數據變化趨勢的圖表,非常適合用于顯示隨時間或其他連續變量變化的數據。在 Matplotlib 中,可以使用plt.plot()函數來繪制折線圖。

1.2 plt.plot()函數介紹

matplotlib.pyplot.plot() 是 Matplotlib 庫中最常用的函數之一,用于繪制二維折線圖。它支持多種參數,可以靈活地控制圖形的樣式、顏色、標記等。

下面是以表格形式介紹 plt.plot() 函數的主要參數及其取值說明:

參數名參數類型常見取值說明
xarray-like 或 scalar例如 [1,2,3,4], np.arange(10)x軸數據,可以是列表、數組等。如果未提供,則使用默認的從0開始的索引序列。
yarray-like 或 scalar例如 [1,4,9,16], np.sin(x)y軸數據,必須提供。
fmtstring(格式字符串)'r', 'g--', 'bo', 'k^:'簡寫格式字符串,用于同時指定顏色、標記和線型。格式為 [color][marker][line]
colorcstring、tuple、matplotlib顏色'red', 'g', (0.5, 0.2, 0.7)設置線條顏色。
markerstring'o', 's', 'd', '^', '+'設置數據點的標記樣式。
markersizemsfloat10設置標記的大小。
markerfacecolormfcstring、tuple'blue'設置標記的填充顏色。
markeredgecolormecstring、tuple'black'設置標記邊緣的顏色。
markeredgewidthmewfloat2設置標記邊緣的寬度。
linestylelsstring'-', '--', ':', '-.', ' '設置線條樣式。
linewidthlwfloat2設置線條寬度。
alphafloat (0.0 ~ 1.0)0.5設置透明度,0為完全透明,1為不透明。
labelstring'sin(x)'設置圖例標簽。
scalex / scaleybooleanTrue是否根據數據自動調整x/y軸的縮放比例。
wherestring ('pre', 'post', 'mid')'pre'用于 step() 圖,設置階梯圖的繪制方式。
solid_capstylestring'round', 'butt', 'projecting'設置線段末端的樣式(實線)。
dash_capstylestring同上設置虛線末端的樣式。
solid_joinstyle / dash_joinstylestring'miter', 'round', 'bevel'設置線段連接處的樣式。
fillstylestring'full', 'left', 'right', 'bottom', 'top'設置標記的填充樣式。
dataindexable objectpandas DataFrame提供一個數據源,可以結合 xy 使用列名。

1.3 繪制簡單折線圖

1.3.1 繪制單條折線圖
# 導入 matplotlib 的 pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 定義 x 軸數據:年份從 2010 到 2019
x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]# 定義 y 軸數據:對應年份的數值
y = [10, 15, 18, 25, 30, 50, 65, 70, 80, 95]# 使用 plot 函數繪制折線圖,x 和 y 是數據
plt.plot(x, y)# 顯示繪制好的圖形窗口
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

1.3.2 繪制多條折線圖
# 導入 matplotlib 的 pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 定義 x 軸數據:年份從 2010 到 2019
x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]# 定義 y 軸數據:對應年份的數值
y = [10, 15, 18, 25, 30, 50, 65, 70, 80, 95]
y2 = [12, 16, 20, 30, 40, 60, 70, 80, 95, 100]# 使用 plot 函數繪制折線圖,x 和 y 是數據
# plt.plot(x, y)
# plt.plot(x, y2)
plt.plot(x, y, x, y2)# 顯示繪制好的圖形窗口
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

1.4 示例:繪制天氣氣溫折線圖

數據如下圖所示,需要根據這個數據繪制氣溫折線圖。

在這里插入圖片描述

實現代碼如下圖所示:

import matplotlib.pyplot as plt
import pandas as pd# 請將此處替換為你的CSV文件路徑
csv_file_path = './data/氣溫.csv'
# 讀取CSV文件
df = pd.read_csv(csv_file_path)# 處理日期格式
df['日期'] = pd.to_datetime(df['日期'])# 提取溫度數值(去除℃符號并轉換為整數)
df['最高氣溫'] = df['最高氣溫'].str.replace('℃', '').astype(int)
df['最低氣溫'] = df['最低氣溫'].str.replace('℃', '').astype(int)# 繪制折線圖
# plt.plot(df['日期'], df['最高氣溫'])
# plt.plot(df['日期'], df['最低氣溫'])
plt.plot('日期', '最高氣溫', data=df)
plt.plot('日期', '最低氣溫', data=df)# 設置x軸日期格式,自動旋轉日期標簽
plt.gcf().autofmt_xdate()# 顯示圖形
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

2. 繪制柱形圖

2.1 柱形圖介紹

柱形圖主要用于比較不同類別之間的數據差異,它通過柱形的高度來直觀地展示數據的大小。Matplotlib 中提供了plt.bar()函數來繪制柱形圖。

2.2 plt.bar()函數介紹

plt.bar() 函數用于在圖表中繪制柱形圖。以下是以表格形式展示的 plt.bar() 參數及參數取值說明:

參數描述取值示例
left條形圖左邊界的x坐標,可以是標量或數組。從matplotlib 3.4版本開始已棄用,推薦使用 x 參數代替。[1, 2, 3] 或者 1
height每個條形的高度,表示數據的值。可以是一個數值(對于單個條形)或一個序列(對于多個條形)。[10, 20, 30]
width條形的寬度,默認值為0.8。可以是單一數值應用于所有條形,也可以是數組對每個條形單獨指定寬度。0.5 或者 [0.2, 0.5, 0.7]
bottom條形圖的基線位置,默認為0。可以用來創建堆積條形圖。[0, 0, 0] 或者 10
align控制條形與它們的x坐標如何對齊。可選值有centeredge。默認值為center'center''edge'
color條形的顏色。可以是單一顏色應用于所有條形,也可以是顏色數組對每個條形單獨指定顏色。'red' 或者 ['blue', 'green', 'red']
edgecolor條形邊緣的顏色。'black'
linewidth條形邊緣線條的寬度。1.5
tick_label設置每個條形的標簽。可以是一個字符串列表。['label1', 'label2', 'label3']
x條形的中心位置的x坐標,替代了早期版本中的left參數。[1, 2, 3]
y在水平方向上放置條形時使用的y坐標,較少使用。[1, 2, 3]

2.3 繪制柱形圖

2.3.1 繪制簡單柱形圖
# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 定義柱狀圖中每個柱子在 x 軸上的位置(分類標簽)
x = [0, 1, 2, 3, 4]# 定義 x 軸上實際顯示的刻度標簽(即替換 x 的顯示)
tick_label = ['a', 'b', 'c', 'd', 'e']# 定義每個柱子的高度(y 軸數值)
height = [3, 5, 2, 8, 6]# 繪制柱狀圖:
# - x: 每個柱子在 x 軸上的位置(分類)
# - height: 每個柱子的高度
# - tick_label: 替換 x 軸上默認的標簽(即用 tick_label 的值顯示在圖上)
plt.bar(x=x, height=height, tick_label=tick_label)# 顯示繪制完成的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

2.3.2 繪制分區柱形圖
# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt
# 導入 numpy 模塊,用于數值計算,這里主要用于生成數組
import numpy as np# 使用 numpy 創建一個數組,表示柱狀圖中每個柱子在 x 軸上的位置
x = np.array([0, 1, 2, 3, 4])# 定義 x 軸上實際顯示的刻度標簽(對應每個柱子)
tick_label = ['a', 'b', 'c', 'd', 'e']# 定義第一組數據的高度(y 軸數值),代表第一個柱狀圖的數據集
height = [3, 5, 2, 8, 6]
# 定義第二組數據的高度(y 軸數值),代表第二個柱狀圖的數據集
height2 = [5, 7, 3, 9, 8]# 設置柱子的寬度
width = 0.3# 繪制第一組柱狀圖:
# - x: 每個柱子在 x 軸上的位置(基于之前定義的數組)
# - height: 第一組柱子的高度
# - tick_label: 替換 x 軸上默認的標簽為自定義的標簽
# - width: 設置柱子的寬度
plt.bar(x=x, height=height, tick_label=tick_label, width=width)# 繪制第二組柱狀圖:
# - x + width: 將第二組柱子的位置相對于第一組向右移動一定寬度,以避免重疊
# - height2: 第二組柱子的高度
# - width: 設置柱子的寬度
plt.bar(x=x + width, height=height2, width=width)# 顯示繪制完成的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

2.3.3 繪制堆積柱形圖
# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt
# 導入 numpy 模塊,用于數值計算,這里主要用于生成數組
import numpy as np# 使用 numpy 創建一個數組,表示柱狀圖中每個柱子在 x 軸上的位置
x = np.array([0, 1, 2, 3, 4])# 定義 x 軸上實際顯示的刻度標簽(對應每個柱子)
tick_label = ['a', 'b', 'c', 'd', 'e']# 定義第一組數據的高度(y 軸數值),代表第一個柱狀圖的數據集
height = [3, 5, 2, 8, 6]
# 定義第二組數據的高度(y 軸數值),代表第二個柱狀圖的數據集
height2 = [5, 7, 3, 9, 8]# 設置柱子的寬度
width = 0.3# 繪制第一組柱狀圖:
# - x: 每個柱子在 x 軸上的位置(基于之前定義的數組)
# - height: 第一組柱子的高度
# - tick_label: 替換 x 軸上默認的標簽為自定義的標簽
# - width: 設置柱子的寬度
plt.bar(x=x, height=height, tick_label=tick_label, width=width)# 繪制第二組柱狀圖,并堆疊在第一組之上:
# - x: 同樣使用之前定義的位置數組
# - height2: 第二組柱子的高度
# - width: 柱子的寬度與第一組保持一致
# - bottom=height: 將第二組柱子堆疊在第一組柱子之上,通過設置底部位置為第一組柱子的高度實現堆積效果
plt.bar(x=x, height=height2, width=width, bottom=height)# 顯示繪制完成的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

2.4 示例:繪制國內生產總值柱形圖

數據如下圖所示,需要根據這個數據繪制國內生產總值柱形圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 導入 numpy 模塊,用于數值計算,這里主要用于生成數組
import numpy as np# 導入 pandas 模塊,用于數據處理,特別是讀取和操作 CSV 文件
import pandas as pd# 用來正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決負號'-'顯示為方塊的問題
plt.rcParams['axes.unicode_minus'] = False# 定義 CSV 文件的路徑(請根據實際情況修改路徑)
csv_file_path = './data/國內生成總值.csv'# 使用 pandas 的 read_csv 函數讀取 CSV 文件,并將數據存儲在一個 DataFrame 對象中
df = pd.read_csv(csv_file_path)# 使用 numpy 的 arange 函數生成一個從 0 到 len(df)-1 的數組,表示柱狀圖中每個柱子的 x 軸位置
x = np.arange(len(df))# 從 DataFrame 中提取 '年份' 列,作為 x 軸的刻度標簽
tick_label = df['年份'].apply(lambda x1: str(x1) + '年')# 從 DataFrame 中提取 '生產總值' 列,作為柱狀圖中每個柱子的高度
height = df['生產總值']# 繪制柱狀圖:
# - x: 每個柱子在 x 軸上的位置(基于之前生成的數組)
# - height: 指定為 '生產總值',表示從 data 參數中提取該列作為柱子的高度
# - width: 設置柱子的寬度為 0.5
# - tick_label: 指定為 '年份',表示從 data 參數中提取該列作為 x 軸的刻度標簽
# - data: 傳入之前讀取的 DataFrame,作為繪圖的數據源
# plt.bar(x=x, height='生產總值', width=0.5, tick_label='年份', data=df)
plt.bar(x=x, height=height, width=0.5, tick_label=tick_label)# 顯示繪制完成的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

3. 繪制條形圖

3.1 條形圖介紹

條形圖與柱形圖類似,只是將柱形的方向旋轉了 90 度,變成了水平方向。它適合用于類別名稱較長或數據系列較多的情況,Matplotlib 中使用plt.barh()函數來繪制條形圖。

3.2 plt.barh()函數介紹

plt.barh() 函數用于在圖表中繪制水平的條形圖。以下是以表格形式展示的 plt.barh() 參數及參數取值說明:

參數描述取值示例
y條形圖基線位置的y坐標,可以是標量或數組。從matplotlib 3.4版本開始已棄用,推薦使用 y 參數代替。[1, 2, 3] 或者 1
width每個條形的寬度(沿x軸方向的實際長度),表示數據的值。可以是一個數值(對于單個條形)或一個序列(對于多個條形)。[10, 20, 30]
height條形的高度,默認值為0.8。可以是單一數值應用于所有條形,也可以是數組對每個條形單獨指定高度。0.5 或者 [0.2, 0.5, 0.7]
left條形圖的起點位置,默認為0。可以用來創建堆積條形圖。[0, 0, 0] 或者 10
align控制條形與它們的y坐標如何對齊。可選值有centeredge。默認值為center'center''edge'
color條形的顏色。可以是單一顏色應用于所有條形,也可以是顏色數組對每個條形單獨指定顏色。'red' 或者 ['blue', 'green', 'red']
edgecolor條形邊緣的顏色。'black'
linewidth條形邊緣線條的寬度。1.5
tick_label設置每個條形的標簽。可以是一個字符串列表。['label1', 'label2', 'label3']
x條形的中心位置的x坐標,替代了早期版本中的left參數。[1, 2, 3]
orientation指定條形圖的方向,但plt.barh()固定為水平方向,因此這個參數通常不需設置也不影響繪圖效果。固定為 'horizontal'

3.3 繪制條形圖

3.3.1 繪制簡單條形圖
# 導入matplotlib.pyplot模塊作為plt,用于繪圖;
# 導入numpy模塊作為np,用于進行數值計算。
import matplotlib.pyplot as plt
import numpy as np# 使用numpy創建一個數組y,它代表每個條形在圖表中的y坐標位置(垂直方向)。
# 這里y軸的位置是從0到4。
y = np.array([0, 1, 2, 3, 4])# 定義一個字符串列表tick_label,包含每個條形對應的標簽。
# 這些標簽將顯示在圖表中對應于每個條形的位置。
tick_label = ['a', 'b', 'c', 'd', 'e']# 創建一個名為width的列表,表示每個條形沿x軸方向的實際長度(即條形的寬度),
# 也就是每個條形所代表的數據值。
width = [3, 5, 2, 8, 6]# 調用plt.barh()函數繪制水平條形圖:
# y=y:指定每個條形在y軸上的位置;
# width=width:為每個條形指定寬度(即數據值);
# tick_label=tick_label:為每個條形指定標簽。
plt.barh(y=y, width=width, tick_label=tick_label)# 調用plt.show()函數顯示圖表窗口,并展示繪制好的水平條形圖。
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

3.3.2 繪制分區條形圖
# 導入matplotlib.pyplot模塊作為plt,用于繪圖。
import matplotlib.pyplot as plt# 導入numpy模塊作為np,用于進行數值計算。
import numpy as np# 使用numpy創建一個數組y,它代表每個條形在圖表中的y坐標位置(垂直方向)。
# 這里y軸的位置是從0到4,對應5個不同的數據點。
y = np.array([0, 1, 2, 3, 4])# 定義一個字符串列表tick_label,包含每個條形對應的標簽。
# 這些標簽將顯示在圖表中對應于每個條形的位置。
tick_label = ['a', 'b', 'c', 'd', 'e']# 創建兩個名為width和width2的列表,分別表示兩組數據集的寬度(即數據值)。
# width代表第一組數據的長度,而width2代表第二組數據的長度。
width = [3, 5, 2, 8, 6]
width2 = [5, 7, 3, 9, 8]# 設置條形的寬度。這里設置了一個較小的高度值,以便繪制相鄰的條形圖。
height = 0.3# 繪制第一個水平條形圖。使用原始y坐標,并設置了條形的寬度、高度以及標簽。
# height=height:指定每個條形的高度,使得我們可以看到分組的條形。
plt.barh(y=y, width=width, height=height, tick_label=tick_label)# 繪制第二個水平條形圖。通過給y坐標加上height值來調整位置,避免與第一個條形圖重疊。
# 此外,沒有為這組條形圖設置標簽,因為它們會與前一組的標簽重疊。
plt.barh(y=y + height, width=width2, height=height)# 顯示圖形窗口,并展示繪制好的水平條形圖。
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

3.3.3 繪制堆積條形圖
# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 導入 numpy 模塊,用于創建數組
import numpy as np# 創建一個 numpy 數組 y,表示每個數據點在 y 軸上的位置(即條形圖的垂直位置)
# 這里是 0 到 4,共 5 個位置,對應 a 到 e 的標簽
y = np.array([0, 1, 2, 3, 4])# 定義條形圖對應的 y 軸標簽,每個標簽對應一個 y 值
tick_label = ['a', 'b', 'c', 'd', 'e']# 第一組數據:每個條形的寬度(代表數據值)
width = [3, 5, 2, 8, 6]# 第二組數據:另一組寬度值,用于與第一組數據堆疊顯示
width2 = [5, 7, 3, 9, 8]# 設置每個條形的高度(水平條形圖的高度是指條形的垂直方向長度)
height = 0.3# 繪制第一組水平條形圖:
# - y:每個條形在 y 軸上的位置
# - width:條形的寬度(數據值)
# - height:條形高度
# - tick_label:設置 y 軸上的標簽
plt.barh(y=y, width=width, height=height, tick_label=tick_label)# 繪制第二組水平條形圖,并堆疊在第一組之上:
# - y:與第一組相同,表示在同一行繪制
# - width:第二組的數據寬度
# - height:同樣設置高度
# - left=width:將第二組條形的起始位置設置為第一組的結束位置,實現堆疊效果
plt.barh(y=y, width=width2, height=height, left=width)# 顯示繪制好的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

3.4 示例:繪制網購替代率條形圖

數據如下圖所示,需要根據這個數據繪制網購替代率條形圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 導入 numpy 模塊,用于數值計算
import numpy as np# 導入 pandas 模塊,用于數據處理和分析
import pandas as pd# 設置matplotlib使用SimHei作為默認字體,以支持中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決保存圖像時負號'-'顯示為方塊的問題
plt.rcParams['axes.unicode_minus'] = False# 定義CSV文件路徑
csv_file_path = './data/網購替代率.csv'# 使用pandas讀取CSV文件,將內容加載到DataFrame中
df = pd.read_csv(csv_file_path)# 根據DataFrame的長度創建一個numpy數組y,代表每個條形在y軸上的位置
y = np.arange(len(df))# 從DataFrame中提取“商品種類”列作為條形圖的標簽
tick_label = df['商品種類']# 將“替代率”列中的百分比符號去掉,并轉換為浮點數,然后除以100得到實際比例值
width = df['替代率'].apply(lambda x: x.replace('%', '')).astype(float) / 100# 設置條形的寬度(這里實際上是指高度,因為是水平條形圖)
height = 0.6# 繪制水平條形圖:
# - y:每個條形在y軸上的位置
# - width:條形的寬度(這里是經過轉換后的替代率)
# - height:條形的高度(垂直方向的實際大小)
# - tick_label:設置y軸上的標簽
plt.barh(y=y, width=width, height=height, tick_label=tick_label)# 自動調整子圖(subplot)之間的參數,使得圖形元素(如坐標軸標簽、圖例、標題等)緊湊地排列,避免重疊或超出圖形邊界。
plt.tight_layout()# 顯示繪制好的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

4. 繪制堆積面積圖

4.1 堆積面積圖介紹

堆積面積圖用于展示多個數據系列在不同類別上的累積趨勢,通過填充線條下方的區域并進行堆積,來體現數據的總量和各部分的構成。在 Matplotlib 中,可以使用plt.stackplot()函數來繪制堆積面積圖。

4.2 plt.stackplot()函數介紹

matplotlib.pyplot.stackplot() 是用于繪制 堆疊面積圖(Stacked Area Plot) 的函數,常用于展示多個數據系列隨時間或其他變量變化的累積趨勢。

以下是 matplotlib.pyplot.stackplot() 函數的參數介紹:

參數名描述取值示例
xx軸的數據,通常是一個一維數組或列表,表示每個數據點的位置range(5)[1, 2, 3, 4, 5]
y1, y2, ..., yn多個數據序列,表示堆疊的每一層數據,可以是多個一維數組或列表[2, 4, 6], [1, 3, 5]
labels為每個堆疊層設置標簽,用于圖例顯示['A', 'B', 'C']
colorscolor設置每個堆疊層的顏色['red', 'blue', 'green']'#FFA500'
baseline設置堆疊的基線方式,影響堆疊層的排列方式'zero'(默認)、'sym''wiggle''weighted_wiggle'
edgecolor設置堆疊區域邊緣的顏色'black''gray'
linewidthlw設置堆疊區域邊緣線的寬度1.52
alpha設置堆疊區域的透明度(0.0完全透明,1.0不透明)0.50.7
data提供一個可索引的數據對象(如 pandas DataFrame),可以通過列名訪問數據df(一個 pandas DataFrame)

4.3 繪制堆積面積圖

# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 定義 x 軸的分類標簽(可以是字符串、數字等)
x = ['a', 'b', 'c', 'd', 'e']# 定義第一組數據(y1),對應堆疊面積圖中的一層
y1 = [1, 4, 3, 5, 6]# 定義第二組數據(y2),堆疊在 y1 之上
y2 = [2, 3, 4, 2, 7]# 定義第三組數據(y3),堆疊在 y2 之上
y3 = [3, 4, 3, 6, 5]# 繪制堆疊面積圖(stacked area chart):
# - x: x 軸上的分類標簽
# - y1, y2, y3: 多組數據,依次堆疊在一起,形成層次感
# 默認情況下,不同數據集會使用不同的顏色,并自動圖例疊加顯示
plt.stackplot(x, y1, y2, y3)# 顯示繪制完成的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

4.4 示例:繪制物流公司物流費用堆積面積圖

數據如下圖所示,需要根據這個數據物流公司物流費用堆積面積圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入 matplotlib.pyplot 模塊,用于繪制圖表
import matplotlib.pyplot as plt# 導入 pandas 模塊,用于讀取和處理 CSV 數據
import pandas as pd# 設置 Matplotlib 使用 'SimHei'(黑體)字體,以支持中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']# 設置 Matplotlib 正常顯示負號(避免負號顯示為方框)
plt.rcParams['axes.unicode_minus'] = False# 定義 CSV 文件的路徑
csv_file_path = './data/物流公司物流費用.csv'# 使用 pandas 讀取指定路徑的 CSV 文件,并將數據加載為 DataFrame(二維表格結構)
df = pd.read_csv(csv_file_path)# 從 DataFrame 中提取 '月份' 列作為 x 軸數據(如 1, 2, 3, ..., 12)
x = df['月份']# 提取三家公司(A公司、B公司、C公司)的物流費用數據,作為堆疊面積圖的三個數據系列
y1 = df['A公司']  # A 公司每月的物流費用
y2 = df['B公司']  # B 公司每月的物流費用
y3 = df['C公司']  # C 公司每月的物流費用# 繪制堆疊面積圖(Stacked Area Plot)
# x:橫軸為月份
# y1, y2, y3:三個公司的費用數據,依次從底部向上堆疊顯示
# 所有公司數據疊加后,可以直觀看出總費用趨勢及各公司貢獻比例
plt.stackplot(x, y1, y2, y3)# 顯示繪制完成的圖表窗口
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

5. 繪制直方圖

5.1 直方圖介紹

直方圖用于展示數據的分布情況,它將數據劃分為多個連續的區間( bins ),并統計每個區間內數據的數量,以柱形的形式展示出來。Matplotlib 中使用plt.hist()函數來繪制直方圖。

5.2 plt.hist()函數介紹

plt.hist() 是 Matplotlib 中用于繪制 直方圖(Histogram) 的函數,主要用于展示數據的分布情況。它可以將一組數據按照指定的區間(bins)劃分,統計每個區間內數據出現的頻數或頻率。

參數名描述取值示例
x輸入數據,通常是一維數組或列表[1, 2, 2, 3, 4, 5]
bins指定柱子數量或邊界點,決定數據如何分組10(10個柱子)、[0, 2, 4, 6](自定義分組)
range數據范圍(最小值、最大值),超出范圍的數據將被忽略(0, 10)
density如果為 True,則顯示概率密度(面積和為1)而非頻數True, False
colorfacecolor設置柱子的填充顏色'blue', '#FFA500'
edgecolor設置柱子邊緣顏色'black', 'white'
alpha設置柱子透明度(0.0 完全透明,1.0 不透明)0.5, 0.7
histtype設置直方圖類型'bar'(默認)、'barstacked''step''stepfilled'
align控制柱子對齊方式'left', 'mid'(默認)、'right'
orientation設置直方圖方向'vertical'(默認)、'horizontal'
rwidth設置柱子之間的相對寬度(0~1),值越小柱子越窄0.8
log如果為 True,y軸使用對數刻度True, False
label設置圖例標簽,用于 plt.legend() 顯示'數據分布'
stacked如果為 True,多個數據集將堆疊顯示True, False

5.3 繪制直方圖

import matplotlib.pyplot as plt# 設置中文字體支持和負號正常顯示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 30名學生的數學成績數據
scores = [58, 62, 65, 67, 68, 70, 72, 72, 73, 74,75, 75, 76, 76, 77, 78, 78, 79, 80, 81,82, 83, 84, 85, 86, 87, 88, 90, 92, 95]# 使用給定的成績數據繪制直方圖
plt.hist(x=scores)# 顯示圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

5.4 示例:繪制薪資分布直方圖

部分數據如下圖所示,需要根據這個數據繪制薪資分布直方圖。

在這里插入圖片描述

實現代碼如下圖所示:

import matplotlib.pyplot as plt
import pandas as pd# 定義CSV文件路徑,該文件包含了清洗后的職位數據集
csv_file_path = './data/cleaned_position_dataset.csv'# 使用pandas讀取CSV文件,并將其內容加載到一個DataFrame(數據幀)中
df = pd.read_csv(csv_file_path)# 根據DataFrame中的'salary_lower'列的數據繪制直方圖。
# 這個直方圖將展示最低薪資的分布情況。
plt.hist(x=df['salary_lower'])# 顯示繪制好的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

6. 繪制餅圖

6.1 餅圖介紹

餅圖用于展示整體中各部分的占比情況,它將一個圓形劃分為多個扇形區域,每個扇形的面積大小與該部分在整體中所占的比例相對應,通過扇形的大小直觀地呈現各部分與整體以及各部分之間的比例關系。Matplotlib 中使用plt.pie()函數來繪制餅圖。

6.2 plt.pie()函數介紹

matplotlib.pyplot.pie() 是 Matplotlib 中用于繪制 餅圖(Pie Chart) 的函數。餅圖是一種常用于展示 類別占比 的圖表類型,適合表現部分與整體之間的關系。

參數名描述取值示例
x一維數組或列表,表示每個扇區的數值大小(將自動轉換為百分比)[15, 30, 45, 10]
labels每個扇區的標簽(類別名稱),用于圖例或直接顯示在圖中['A', 'B', 'C', 'D']
explode設置某些扇區是否“突出顯示”,值越大離中心越遠(0, 0.1, 0, 0)(第二個扇區突出)
colors自定義每個扇區的顏色,可以是顏色名稱或十六進制代碼['red', 'blue', 'green', 'orange']
autopct顯示每個扇區所占百分比,可使用格式化字符串'%1.1f%%'(顯示一位小數的百分比)
pctdistance設置百分比標簽距離餅圖中心的距離(0表示圓心,1表示邊緣)0.5(在餅圖中間顯示)
shadow是否為餅圖添加陰影效果TrueFalse
startangle設置餅圖起始繪制角度(默認從 x 軸正方向開始)90(從 y 軸正方向開始繪圖)
radius設置餅圖的半徑,默認為 11.2(放大餅圖)
counterclock是否按逆時針方向繪制扇區True(默認)、False(順時針)
wedgeprops字典類型,用于設置餅圖扇區的屬性,如邊框、寬度等{'edgecolor': 'black', 'linewidth': 1}
textprops字典類型,設置標簽文字的樣式,如字體大小、顏色等{'fontsize': 10, 'color': 'black'}
labeldistance設置標簽距離餅圖中心的距離(默認為 1.1)1.2(標簽離餅圖更遠)
center設置餅圖的中心坐標(默認為 (0, 0))(0.5, 0.5)
rotatelabels是否旋轉標簽以匹配扇區角度TrueFalse

6.3 繪制餅圖

6.3.1 繪制餅圖
# 導入matplotlib.pyplot模塊,用于繪圖
import matplotlib.pyplot as plt# 數據列表x表示每個部分的大小或貢獻度。這里作為餅圖各部分的比例。
x = [25, 35, 20, 20, 50]# 標簽列表labels用于標記餅圖中每個部分代表的數據類別。
labels = ['A', 'B', 'C', 'D', 'E']# 使用plt.pie()函數繪制餅圖:
# 參數x指定數據列表,決定了餅圖各個扇區的大小;
# labels參數指定與x列表對應的數據標簽;
# autopct參數設置為'%.1f%%',用于在餅圖上顯示百分比數值,保留一位小數。
plt.pie(x=x, labels=labels, autopct='%.1f%%')# 調用plt.show()函數顯示圖形結果。
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

6.3.2 繪制圓環圖
# 導入matplotlib.pyplot模塊,用于繪圖
import matplotlib.pyplot as plt# 數據列表x表示每個部分的大小或貢獻度。這里作為餅圖各部分的比例。
x = [25, 35, 20, 20, 50]# 標簽列表labels用于標記餅圖中每個部分代表的數據類別。
labels = ['A', 'B', 'C', 'D', 'E']# 使用plt.pie()函數繪制餅圖:
# 參數x指定數據列表,決定了餅圖各個扇區的大小;
# labels參數指定與x列表對應的數據標簽;
# autopct參數設置為'%.1f%%',用于在餅圖上顯示百分比數值,保留一位小數。
# wedgeprops參數通過字典{'width': 0.6}來指定餅圖中每個楔子(扇區)的寬度,從而創建一個類似圓環的效果。
plt.pie(x=x, labels=labels, autopct='%.1f%%', wedgeprops={'width': 0.6})# 調用plt.show()函數顯示圖形結果。
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

6.4 示例:繪制賬單餅圖

數據如下圖所示,需要根據這個數據繪制賬單餅圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入matplotlib.pyplot模塊,用于繪圖功能。
import matplotlib.pyplot as plt# 導入pandas模塊,并使用pd作為別名。Pandas是一個強大的數據處理和分析庫。
import pandas as pd# 設置matplotlib的中文字體為SimHei(黑體),以確保中文標簽可以正常顯示。
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號'-'顯示為方塊的問題,通過設置'axes.unicode_minus'為False來實現。
plt.rcParams['axes.unicode_minus'] = False# 定義包含CSV文件路徑的變量。這里假設賬單數據存儲在一個名為'賬單.csv'的文件中。
csv_file_path = './data/賬單.csv'# 使用pandas的read_csv函數讀取CSV文件中的數據,并將其存儲在一個DataFrame對象中。
df = pd.read_csv(csv_file_path)# 從DataFrame中提取'金額'列的數據,用于表示餅圖各個部分的大小或貢獻度。
x = df['金額']# 從DataFrame中提取'支出分類'列的數據,用作餅圖各部分的標簽,以便了解每個部分代表什么。
labels = df['支出分類']# 使用plt.pie()函數繪制餅圖:
# 參數x指定數據列表,決定了餅圖各個扇區的大小;
# labels參數指定與x列表對應的數據標簽,幫助識別每個扇區所代表的類別;
# autopct參數設置為'%.1f%%',用于在餅圖上顯示百分比數值,保留一位小數。
plt.pie(x=x, labels=labels, autopct='%.1f%%')# 調用plt.show()函數顯示圖形結果。這是展示已創建圖表的必要步驟。
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

7. 繪制散點圖

7.1 散點圖和氣泡圖介紹

散點圖用于展示兩個變量之間的關系,它通過在平面直角坐標系中繪制大量的點,每個點的橫縱坐標分別對應兩個變量的取值,以此直觀地呈現變量之間是否存在關聯、關聯的方向以及關聯的強度。Matplotlib 中使用plt.scatter()函數來繪制散點圖。

氣泡圖用于展示三個變量之間的關系,它在散點圖的基礎上,通過點的大小來表示第三個變量的取值,即每個氣泡的橫縱坐標對應兩個變量的數值,而氣泡的大小則反映第三個變量的大小,從而能同時呈現三個變量之間的關聯情況。Matplotlib 中繪制氣泡圖同樣可以使用plt.scatter()函數,通過設置s參數來指定氣泡的大小。

7.2 plt.scatter()函數介紹

matplotlib.pyplot.scatter() 是 Matplotlib 中用于繪制 散點圖(Scatter Plot) 的函數。散點圖是一種常用的統計圖表,用于展示 兩個變量之間的關系,每個點的位置由一對數值(x 和 y)決定。

參數名描述取值示例
x, y數據點的橫縱坐標,必須為一維數組或列表[1, 2, 3, 4], np.arange(10)
s點的大小(可以是標量或與數據點數量相同的數組)50(所有點大小一致)、[20, 40, 60, 80](每個點大小不同)
c點的顏色(可以是單色、顏色序列或與數據點數量相同的數值)'red'['red', 'blue'][0.1, 0.5, 0.9](用于顏色映射)
marker點的形狀(標記樣式)'o'(圓形,默認)、's'(正方形)、'^'(三角形)
cmap顏色映射表(當 c 是數值時,用于映射為顏色)'viridis''plasma''coolwarm'
alpha設置點的透明度(0.0 完全透明,1.0 完全不透明)0.6
linewidths點的邊框線寬(可以是標量或數組)1[0.5, 1.0, 1.5]
edgecolors點的邊框顏色'black''none'(無邊框)
vmin, vmax用于顏色映射的最小和最大值,控制顏色映射范圍vmin=0, vmax=100
norm用于將顏色數據歸一化的對象,如 matplotlib.colors.NormalizeNormalize(vmin=0, vmax=100)
plotnonfinite是否繪制 NaNinf 值的點(默認為 FalseTrueFalse

7.3 繪制散點圖

7.3.1 繪制散點圖
# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 設置中文字體為黑體,以支持中文正常顯示
plt.rcParams['font.sans-serif'] = ['SimHei']# 設置正常顯示負號
plt.rcParams['axes.unicode_minus'] = False# 身高數據(單位:cm)
heights = [155, 160, 165, 170, 175, 180, 185, 190, 195, 200]# 體重數據(單位:kg)
weights = [50, 54, 58, 62, 66, 70, 75, 80, 85, 90]# 繪制散點圖,x軸為身高,y軸為體重
plt.scatter(x=heights, y=weights)# 顯示繪制好的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

7.3.2 繪制氣泡散點圖
# 導入 matplotlib.pyplot 模塊作為 plt,用于繪圖
import matplotlib.pyplot as plt# 設置中文字體為 SimHei(黑體),以確保中文可以正常顯示在圖表上
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決坐標軸負號 '-' 顯示為方塊的問題,保證負數符號能夠正常顯示
plt.rcParams['axes.unicode_minus'] = False# 身高數據列表,單位為厘米(cm)
heights = [155, 160, 165, 170, 175, 180, 185, 190, 195, 200]# 體重數據列表,單位為千克(kg)
weights = [50, 54, 58, 62, 66, 70, 75, 80, 85, 90]# 點的大小列表,數值越大點越大。這里用于控制散點圖中每個點的大小
sizes = [10, 20, 30, 40, 50, 90, 150, 180, 190, 200]# 使用 scatter 方法繪制散點圖,x軸是身高,y軸是體重,s 參數表示每個點的大小由 sizes 列表控制
plt.scatter(x=heights, y=weights, s=sizes)# 展示圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

7.4 示例:繪制車速與制動距離散點圖

數據如下圖所示,需要根據這個數據繪制車速與制動距離散點圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入繪圖庫 matplotlib.pyplot,用于繪制圖表
import matplotlib.pyplot as plt# 導入數據處理庫 pandas,用于讀取和處理數據
import pandas as pd# 設置中文字體為 SimHei(黑體),確保圖表中可以正常顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei']# 設置正常顯示負號,防止負號顯示為小方塊
plt.rcParams['axes.unicode_minus'] = False# 定義CSV文件路徑,存儲的是車速與制動距離的數據
csv_file_path = './data/車速與制動距離.csv'# 使用 pandas 讀取CSV文件數據,并保存為 DataFrame 格式
df = pd.read_csv(csv_file_path)# 使用 scatter 函數繪制散點圖:
# - x軸數據為車速(df['車速'])
# - y軸數據為制動距離(df['制動距離'])
plt.scatter(x=df['車速'], y=df['制動距離'])# 顯示繪制好的圖表
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

8. 繪制箱形圖

8.1 箱形圖介紹

箱形圖用于展示數據的分布特征,它通過箱體、須線和異常值等元素,直觀呈現數據的集中趨勢、離散程度以及異常情況。具體來說,它以箱體體現數據的四分位數范圍,用須線展示數據的正常分布區間,將超出須線范圍的數據標記為異常值,從而全面概括數據的分布狀態。Matplotlib 中使用plt.boxplot()函數來繪制箱形圖。

8.2 plt.boxplot()函數介紹

matplotlib.pyplot.boxplot() 是 Matplotlib 中用于繪制 箱型圖(Boxplot,又稱箱線圖、盒須圖) 的函數。它是一種用于顯示數據分布情況的統計圖表,能夠清晰地展示數據的 中位數、上下四分位數、異常值 等統計信息,非常適合用于分析數據的離散程度和識別異常值

參數名描述取值示例
x輸入數據,可以是一個列表、數組或包含多個數據集的列表的列表[data1, data2]
notch是否繪制缺口(表示中位數的置信區間)TrueFalse
sym異常值(離群點)的標記符號,若為 '' 則不顯示異常值'o''+'''
vert箱線圖是否垂直顯示True(默認,垂直)、False(水平)
whis控制須的范圍,默認為 1.5 倍四分位距(IQR)1.53、或一個表示上下限的列表 [lower, upper]
positions設置每個箱型圖在 x 軸上的位置[1, 2, 4, 5]
widths控制箱體的寬度0.5[0.3, 0.5]
patch_artist是否填充箱體顏色True(填充顏色)、False(默認,空心)
meanline是否用線表示均值(與 showmeans 配合使用)TrueFalse
showmeans是否顯示均值TrueFalse
showcaps是否顯示上下邊緣的橫線(帽線)TrueFalse
showbox是否顯示箱體TrueFalse
showfliers是否顯示異常值(離群點)True(默認)、False
boxprops設置箱體樣式(顏色、線寬等){'color': 'black', 'linewidth': 2}
whiskerprops設置須的樣式{'color': 'red', 'linestyle': '--'}
flierprops設置異常值點的樣式{'marker': 'o', 'color': 'r'}
medianprops設置中位數線的樣式{'color': 'green', 'linewidth': 2}
meanprops設置均值點或線的樣式{'marker': 'D', 'markerfacecolor': 'blue'}

8.3 繪制箱形圖

# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 設置中文字體為 SimHei(黑體),確保圖表中可以正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 構造三組示例數據,用于繪制箱線圖
data1 = [-5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 30]  # 第一組數據
data2 = [-8, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35]  # 第二組數據
data3 = [-9, 5, 8, 11, 15, 19, 22, 25, 28, 30, 33, 35, 50]  # 第三組數據# 將三組數據放入一個列表中,作為箱線圖的輸入數據
data = [data1, data2, data3]# 繪制箱線圖(boxplot),用于展示每組數據的分布情況和異常值
# 默認會顯示上下四分位數、中位數、異常值等統計信息
plt.boxplot(data)# 顯示繪制好的箱線圖
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

8.4 示例:繪制發電量箱形圖

數據如下圖所示,需要根據這個數據繪制發電量箱形圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入 matplotlib.pyplot 模塊,用于繪圖操作
import matplotlib.pyplot as plt# 導入 pandas 模塊,用于數據處理與分析,使用 pd 作為別名
import pandas as pd# 設置中文字體為 SimHei(黑體),確保圖表中可以正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 定義 CSV 文件路徑,指向包含“全國發電量”數據的文件
csv_file_path = './data/全國發電量.csv'# 使用 pandas 的 read_csv 函數讀取 CSV 文件,并將內容加載到一個 DataFrame 對象 df 中
df = pd.read_csv(csv_file_path)# 使用 pandas 的 boxplot 方法繪制箱線圖:
# - column='發電量(億千瓦時)' 表示要分析的數值列
# - by='年份' 表示按照“年份”分組繪制箱線圖,即每個年份對應一個箱型
df.boxplot(column='發電量(億千瓦時)', by='年份')# 顯示繪制好的箱線圖
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

9. 繪制雷達圖

9.1 雷達圖介紹

雷達圖用于展示多個維度數據的綜合情況,它以一個中心點為原點,向四周延伸出多個坐標軸(每個坐標軸代表一個數據維度),將同一組數據在不同維度上的取值連接成多邊形,以此直觀地呈現數據在各個維度上的分布特征以及不同組數據之間的差異。

9.2 plt.polar()函數介紹

matplotlib.pyplot.polar() 是一個便捷函數,用于在 極坐標系(Polar Coordinate System) 中繪制曲線。極坐標使用 角度(θ)半徑(r) 來表示點的位置,適用于周期性數據、方向性數據或圓形分布的可視化。

參數名描述取值示例
theta角度數組(單位:弧度),表示每個點的方向np.linspace(0, 2*np.pi, 100)
r半徑數組,表示每個點到原點的距離[1, 1.5, 1, 0.5]
s點的大小(用于散點圖)50
c點的顏色(可用于顏色映射)'red'[0.1, 0.5, 0.9]
marker標記樣式(如 'o', 's', '^''o'(圓形)、'x'
cmap顏色映射表,當 c 為數值時使用'viridis''hsv'
alpha透明度0.7
linewidths線寬(用于線圖)或邊框寬度2
edgecolors邊框顏色'black''none'
**kwargs其他傳遞給 plot()scatter() 的參數linestyle='--', label='曲線1'

9.3 繪制雷達圖

# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 導入 numpy 模塊,用于數值計算,特別是角度和數組操作
import numpy as np# 設置中文字體為 SimHei(黑體),確保圖表中的中文標簽可以正常顯示
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 定義極坐標的角度數組(theta),單位為弧度
# 從 0 開始,分別對應上、左、下、右四個方向,最后回到 0 形成閉合圖形
theta = np.array([0, np.pi / 2, np.pi, 3 * np.pi / 2, 0])
print(np.pi)
# 定義每個方向上的半徑值(r),這里所有方向的值都為 6,表示一個正方形(或菱形)輪廓
r = [6, 6, 6, 6, 6]# 創建極坐標圖(雷達圖的基礎)
plt.polar(theta, r)# 定義雷達圖各軸的標簽(維度名稱)
# 注意:np.array 中第一個元素為 None,是因為 matplotlib 極坐標默認從 0° 開始,這里跳過第一個標簽位置
radar_labels = [None, '維度(B)', '維度(C)', '維度(D)', '維度(A)']# 設置極坐標的角度網格標簽(將弧度轉換為角度,并設置對應的文字標簽)
plt.thetagrids(theta * 180 / np.pi, radar_labels)# 填充雷達圖內部區域,增加可視化效果
# alpha=0.3 表示填充顏色的透明度(30% 不透明)
plt.fill(theta, r, alpha=0.3)# 顯示繪制好的雷達圖
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

9.4 示例:繪制霍蘭德職業興趣測試雷達圖

數據如下圖所示,需要根據這個數據繪制霍蘭德職業興趣測試雷達圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入必要的庫:numpy用于數值計算,matplotlib.pyplot用于繪圖,pandas用于數據處理
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd# 設置圖片清晰度(DPI),以提高圖像質量
plt.rcParams['figure.dpi'] = 300# 設置中文字體為 SimHei(黑體),確保圖表中的中文標簽可以正常顯示
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號在圖表中正常顯示
plt.rcParams['axes.unicode_minus'] = False# 定義CSV文件路徑,該文件存儲的是霍蘭德職業興趣測試的數據
csv_file_path = './data/霍蘭德職業興趣測試.csv'# 使用 pandas 的 read_csv 函數讀取CSV文件,并將其轉換為DataFrame格式以便于操作
df = pd.read_csv(csv_file_path)# 將DataFrame中的'維度'列提取出來作為雷達圖的標簽
radar_labels = df['維度'].tolist()# 刪除DataFrame中的'維度'列,保留其余數值作為雷達圖的數據點;將DataFrame轉換為列表形式
data = df.drop(columns='維度').values.tolist()# 計算每個維度對應的角度位置,使得這些角度均勻分布在圓周上
angles = np.linspace(0, 2 * np.pi, len(radar_labels), endpoint=False)# 添加第一個角度到數組末尾,使圖形閉合
angles = np.concatenate((angles, [angles[0]]))# 用于將兩個或多個數組連接在一起。
# 將數據數組的第一個元素添加到數組的末尾,使得繪制雷達圖時,最后一個點能與第一個點連接,形成一個閉合的圖形。
data = np.concatenate((data, [data[0]]))# 同樣對標簽進行操作,以保持標簽和數據的一致性
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))# 創建極坐標圖(雷達圖)
plt.polar(angles, data)# 設置雷達圖的角度網格線及對應的文本標簽
plt.thetagrids(angles * 180 / np.pi, labels=radar_labels)# 填充雷達圖內部區域,增加可視化效果。alpha 參數控制填充顏色的透明度
plt.fill(angles, data, alpha=0.25)# 展示繪制好的雷達圖
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

10. 繪制誤差棒圖

10.1 誤差棒圖介紹

誤差棒圖用于展示數據的測量誤差或不確定性,它在數據點或柱形等元素的基礎上,添加了表示誤差范圍的線段(誤差棒),以此直觀地呈現數據的可靠程度或變異范圍。Matplotlib 中可以使用plt.errorbar()函數繪制誤差棒圖,也可在plt.bar()等函數中通過參數設置添加誤差棒。

10.2 plt.errorbar()函數介紹

matplotlib.pyplot.errorbar() 是 Matplotlib 中用于繪制 帶誤差棒的圖表(Error Bar Plot) 的函數。它常用于展示數據點的 不確定性、誤差范圍或置信區間,非常適合用于科學實驗、統計分析、數據可視化等場景。

參數名描述常見取值示例
x, y數據點的橫縱坐標,必須為一維數組或列表[1, 2, 3, 4], np.arange(10)
xerr, yerrx 或 y 方向的誤差值,可以是標量(所有點相同誤差)或數組(每個點不同誤差)0.5(固定誤差)、[0.1, 0.2, 0.3, 0.4](每個點不同誤差)
fmt數據點的樣式格式字符串,與 plt.plot() 中的 fmt 相同'o'(圓形點)、's-'(正方形連線)、'rx'(紅色叉號)
ecolor誤差棒的顏色(默認與數據點一致)'red', 'black'
elinewidth誤差棒的線寬2
capsize誤差棒兩端帽子的寬度(用于更清晰顯示誤差范圍)5
barsabove是否將誤差棒繪制在數據點/線之上TrueFalse
lolims, uplims設置 y 方向的下限或上限誤差(僅顯示一半誤差棒)True
xlolims, xuplims設置 x 方向的下限或上限誤差True
errorevery控制每隔多少個點繪制誤差棒(用于數據點太多時簡化顯示)2(每隔一個點繪制一次)

10.3 繪制誤差棒圖

# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 定義 x 軸數據,表示橫坐標位置
x = [1, 2, 3, 4, 5]# 定義 y 軸數據,表示每個 x 值對應的測量值或平均值
y = [25, 32, 33, 26, 25]# 定義誤差數據,表示每個 y 值對應的誤差范圍(上下對稱)
yerr = [0.5, 0.4, 0.6, 1, 0.7]# 使用 errorbar 函數繪制帶誤差棒的圖表:
# - x: 橫坐標數據
# - y: 縱坐標數據(實際值)
# - yerr: 每個點的誤差值(可為單個數字、列表或數組)
# - elinewidth: 誤差棒的線寬
# - capsize: 誤差棒兩端帽子(橫線)的長度
# - capthick: 誤差棒帽子的線寬
plt.errorbar(x=x, y=y, yerr=yerr, elinewidth=2, capsize=5, capthick=2)# 顯示繪制好的圖形
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

10.4 示例:繪制城市人口增長誤差棒圖

數據如下圖所示,需要根據這個數據繪制城市人口增長誤差棒圖。

在這里插入圖片描述

實現代碼如下圖所示:

# 導入 matplotlib.pyplot 模塊,用于繪圖
import matplotlib.pyplot as plt
# 導入 pandas 模塊,使用其強大的數據處理能力
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 定義CSV文件路徑,該文件存儲的是城市人口增長的數據
csv_file_path = './data/城市人口增長.csv'# 使用 pandas 的 read_csv 函數讀取CSV文件,并將其轉換為DataFrame格式以便于操作
df = pd.read_csv(csv_file_path)# 從 DataFrame 中提取年份列并轉換為列表,作為 x 軸數據
x = df['年份'].tolist()# 提取城市A的總人口數列并轉換為列表,作為第一個數據序列的 y 軸數據
y = df['城市A_總人口數(人)'].tolist()# 提取城市A的人口標準差列,移除文本“±”,轉換為整型,并轉換為列表,作為第一個數據序列的誤差棒數據
yerr = df['城市A_人口標準差(人)'].apply(lambda x: x.replace('±', '')).astype(int).tolist()# 提取城市B的總人口數列并轉換為列表,作為第二個數據序列的 y 軸數據
y2 = df['城市B_總人口數(人)'].tolist()# 提取城市B的人口標準差列,移除文本“±”,轉換為整型,并轉換為列表,作為第二個數據序列的誤差棒數據
yerr2 = df['城市B_人口標準差(人)'].apply(lambda x: x.replace('±', '')).astype(int).tolist()# 繪制帶誤差棒的城市A人口變化圖表
plt.errorbar(x=x, y=y, yerr=yerr, capsize=3)
# 繪制帶誤差棒的城市B人口變化圖表
plt.errorbar(x=x, y=y2, yerr=yerr2, capsize=3)# 設置 y 軸刻度值不以科學記數法顯示,而是以普通數字格式顯示
plt.ticklabel_format(style='plain', axis='y')# 顯示繪制好的圖形
plt.show()

繪制的圖形如下圖所示:

在這里插入圖片描述

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

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

相關文章

【世紀龍科技】數字化技術解鎖新能源汽車電驅動總成裝調與檢修

隨著新能源汽車產業加速升級,電驅動總成裝調與檢修技術已成為職業院校汽車專業教學的核心挑戰。傳統實訓模式面臨設備投入高、更新周期長、高壓操作安全隱患多、教學與產業需求脫節等現實問題,導致學生實踐能力培養滯后于行業發展。如何通過數字化手段突…

springboot基于Java與MySQL庫的健身俱樂部管理系統設計與實現

用戶:注冊,登錄,健身教練,健身課程,健身器材,健身資訊,課程報名管理,教練預約管理,會員充值管理,個人中心管理員:登錄,個人中心&#…

如何修改debian的ip地址

編輯配置文件: sudo nano /etc/network/interfaces修改內容(示例將 eth0 設為靜態IP): auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 #…

haproxy七層代理(知識點+相關實驗部署)

目錄 1.負載均衡介紹 1.1 什么是負載均衡 1.2 為什么用負載均衡 1.3 負載均衡類型 1.3.1 四層負載均衡 1.3.2 七層負載均衡 1.3.3 四層和七層的區別 2.haproxy簡介 2.1 haproxy主要特性 2.2 haproxy的優點與缺點 3.haproxy的安裝和服務信息 3.1 實驗環境 3.1.1 hap…

【集合】JDK1.8 HashMap 底層數據結構深度解析

一、核心數據結構:為什么是 "數組 鏈表 紅黑樹"??HashMap 的底層設計本質是用空間換時間,通過哈希表的快速定位特性,結合鏈表和紅黑樹處理沖突,平衡查詢與插入效率。?1.1 基礎容器:哈希桶數組…

【element-ui】HTML引入本地文件出現font找不到/fonts/element-icons.woff

文章目錄目錄結構問題復現解決辦法目錄結構 |-web|- public|- lib|- ...|- index.htmlindex.html <!DOCTYPE html> <html> <head><meta charset"UTF-8"><!-- import CSS --><link rel"stylesheet" href"./public/…

Windows|CUDA和cuDNN下載和安裝,默認安裝在C盤和不安裝在C盤的兩種方法

本篇文章將詳細介紹在Windows操作系統中配置CUDA和cuDNN的步驟。通過本教程&#xff0c;您將能夠輕松完成CUDA和cuDNN的安裝、環境變量配置以及與深度學習框架&#xff08;如TensorFlow和PyTorch&#xff09;兼容性測試&#xff0c;從而為您的深度學習項目提供強大的硬件支持。…

Vue 項目動態接口獲取翻譯數據實現方案(前端處理語言翻譯 vue-i18n)

在大型多語言項目中&#xff0c;將翻譯數據硬編碼在項目中往往不夠靈活。通過接口動態獲取翻譯數據&#xff0c;并結合本地緩存提升性能&#xff0c;是更優的國際化實現方式。本文將詳細介紹如何在 Vue 項目中實現這一方案。 方案優勢 靈活性高&#xff1a;翻譯內容更新無需修改…

Mybatis-plus多數據源

適用于多種場景&#xff1a;純粹多庫、 讀寫分離、 一主多從、 混合模式等目前我們就來模擬一個純粹多庫的一個場景&#xff0c;其他場景類似場景說明&#xff1a;我們創建兩個庫&#xff0c;分別為&#xff1a; mybatis_plus&#xff08;以前的庫不動&#xff09;與my…

廣東省省考備考(第五十六天7.25)——常識:科技常識(聽課后強化訓練)

錯題解析解析解析解析解析解析解析解析解析標記題解析解析今日題目正確率&#xff1a;40%

RabbitMQ簡述

RabbitMQ簡述 RabbitMQ 是一個開源的 消息代理&#xff08;Message Broker&#xff09; 軟件&#xff0c;實現了 高級消息隊列協議&#xff08;AMQP&#xff09;&#xff0c;用于在分布式系統中存儲、轉發消息&#xff0c;支持異步通信、解耦服務、負載均衡和消息緩沖。 核心…

skywalking應用性能監控

1.skywalking描述 官方文檔 SkyWalking 是一個開源的可觀測性平臺&#xff0c;用于收集、分析、匯總和可視化來自服務及云原生基礎設施的數據。SkyWalking 為維護分布式系統的清晰視圖提供了簡便的方法&#xff0c;即使是在跨云環境中也能做到。它是一款專為云原生、基于容器的…

如何徹底清除服務器上的惡意軟件與后門

清除服務器上的惡意軟件與后門 是確保服務器安全的關鍵步驟。惡意軟件和后門可能導致數據泄露、性能下降&#xff0c;甚至服務器被攻擊者完全控制。以下是徹底清除惡意軟件與后門的詳細指南&#xff0c;包括 檢測、清理、修復與預防 的步驟。1. 徹底清除惡意軟件與后門的步驟1.…

Linux和Windows基于V4L2和TCP的QT監控

最近工作需要用QT做一個網絡攝像頭測試&#xff0c;簡單記錄&#xff1a;服務端&#xff0c;主機配置為Ubuntu&#xff0c;通過端口12345采集傳輸MJPEG格式圖片windows客戶端&#xff0c;QT Creator通過ip地址連接訪問提前準備服務端需要安裝QT5sudo apt-get install qt5-defau…

yolo格式

labelimg中的格式yolo格式id 框中心點X對于總圖片的比例 框中心點Y對于總圖片的比例 框X總長度對于總圖片的比例 框Y總長度對于總圖片的比例

Day 8-zhou R包批量安裝小補充!!!

BiocManager::install(c(“S4Vectors”, “BiocGenerics”)) 以下是使用BiocManager安裝S4Vectors和BiocGenerics包的詳細步驟。這些步驟基于最新的Bioconductor和R版本&#xff08;R 4.5&#xff09;。 安裝步驟安裝BiocManager 如果你還沒有安裝BiocManager&#xff0c;可以使…

電商項目_核心業務_數據歸檔

無論采用哪種存儲系統&#xff0c;數據查詢的耗時取決于兩個因素查找的時間復雜度數據總量查找的時間復雜度又取決于查找算法數據存儲結構以Mysql存儲的訂單數據為例&#xff0c;隨著業務的發展&#xff0c;數據量越來越大&#xff0c;對一些歷史歸檔數據的查詢&#xff0c;如果…

第十講:stack、queue、priority_queue以及deque

目錄 1、stack 1.1、stack的使用 1.2、stack的OJ題 1.2.1、最小棧 1.2.2、棧的壓入彈出序列 1.2.3、逆波蘭表達式求值 1.3、stack的模擬實現 2、queue 2.1、queue的使用 2.2、queue的OJ題 2.2.1、二叉樹的層序遍歷 2.3、queue的模擬實現 3、priority_queue 3.1、…

如何思考一個動態規劃問題需要幾個狀態?

如何思考一個動態規劃問題需要幾個狀態&#xff1f;第一步&#xff1a;思考 角色第二步&#xff1a;考慮 過去的影響第三步&#xff1a;畫出狀態轉移圖第四步&#xff1a;寫出狀態轉移方程第五步&#xff1a;驗證是否能覆蓋所有路徑 邊界幾個常見題目總結&#xff1a;第一步&a…

【每天一個知識點】生成對抗聚類(Generative Adversarial Clustering, GAC)

&#x1f4d8; 生成對抗聚類&#xff08;Generative Adversarial Clustering, GAC&#xff09; 一、研究背景與動機 聚類是無監督學習中的核心任務。傳統方法如 K-means、GMM、DBSCAN 等難以適應高維、非線性、復雜結構數據。 生成對抗聚類&#xff08;GAC&#xff09; 融合…