文章目錄
- 一、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()
函數的主要參數及其取值說明:
參數名 | 參數類型 | 常見取值 | 說明 |
---|---|---|---|
x | array-like 或 scalar | 例如 [1,2,3,4] , np.arange(10) | x軸數據,可以是列表、數組等。如果未提供,則使用默認的從0開始的索引序列。 |
y | array-like 或 scalar | 例如 [1,4,9,16] , np.sin(x) | y軸數據,必須提供。 |
fmt | string(格式字符串) | 'r' , 'g--' , 'bo' , 'k^:' 等 | 簡寫格式字符串,用于同時指定顏色、標記和線型。格式為 [color][marker][line] 。 |
color 或 c | string、tuple、matplotlib顏色 | 'red' , 'g' , (0.5, 0.2, 0.7) 等 | 設置線條顏色。 |
marker | string | 'o' , 's' , 'd' , '^' , '+' 等 | 設置數據點的標記樣式。 |
markersize 或 ms | float | 10 | 設置標記的大小。 |
markerfacecolor 或 mfc | string、tuple | 'blue' | 設置標記的填充顏色。 |
markeredgecolor 或 mec | string、tuple | 'black' | 設置標記邊緣的顏色。 |
markeredgewidth 或 mew | float | 2 | 設置標記邊緣的寬度。 |
linestyle 或 ls | string | '-' , '--' , ':' , '-.' , ' ' | 設置線條樣式。 |
linewidth 或 lw | float | 2 | 設置線條寬度。 |
alpha | float (0.0 ~ 1.0) | 0.5 | 設置透明度,0為完全透明,1為不透明。 |
label | string | 'sin(x)' | 設置圖例標簽。 |
scalex / scaley | boolean | True | 是否根據數據自動調整x/y軸的縮放比例。 |
where | string ('pre' , 'post' , 'mid' ) | 'pre' | 用于 step() 圖,設置階梯圖的繪制方式。 |
solid_capstyle | string | 'round' , 'butt' , 'projecting' | 設置線段末端的樣式(實線)。 |
dash_capstyle | string | 同上 | 設置虛線末端的樣式。 |
solid_joinstyle / dash_joinstyle | string | 'miter' , 'round' , 'bevel' | 設置線段連接處的樣式。 |
fillstyle | string | 'full' , 'left' , 'right' , 'bottom' , 'top' | 設置標記的填充樣式。 |
data | indexable object | pandas DataFrame | 提供一個數據源,可以結合 x 和 y 使用列名。 |
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坐標如何對齊。可選值有center 和edge 。默認值為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坐標如何對齊。可選值有center 和edge 。默認值為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()
函數的參數介紹:
參數名 | 描述 | 取值示例 |
---|---|---|
x | x軸的數據,通常是一個一維數組或列表,表示每個數據點的位置 | range(5) 、[1, 2, 3, 4, 5] |
y1, y2, ..., yn | 多個數據序列,表示堆疊的每一層數據,可以是多個一維數組或列表 | [2, 4, 6] , [1, 3, 5] |
labels | 為每個堆疊層設置標簽,用于圖例顯示 | ['A', 'B', 'C'] |
colors 或 color | 設置每個堆疊層的顏色 | ['red', 'blue', 'green'] 、'#FFA500' |
baseline | 設置堆疊的基線方式,影響堆疊層的排列方式 | 'zero' (默認)、'sym' 、'wiggle' 、'weighted_wiggle' |
edgecolor | 設置堆疊區域邊緣的顏色 | 'black' 、'gray' |
linewidth 或 lw | 設置堆疊區域邊緣線的寬度 | 1.5 、2 |
alpha | 設置堆疊區域的透明度(0.0完全透明,1.0不透明) | 0.5 、0.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 |
color 或 facecolor | 設置柱子的填充顏色 | '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 | 是否為餅圖添加陰影效果 | True 或 False |
startangle | 設置餅圖起始繪制角度(默認從 x 軸正方向開始) | 90 (從 y 軸正方向開始繪圖) |
radius | 設置餅圖的半徑,默認為 1 | 1.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 | 是否旋轉標簽以匹配扇區角度 | True 或 False |
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.Normalize | Normalize(vmin=0, vmax=100) |
plotnonfinite | 是否繪制 NaN 或 inf 值的點(默認為 False ) | True 、False |
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 | 是否繪制缺口(表示中位數的置信區間) | True 或 False |
sym | 異常值(離群點)的標記符號,若為 '' 則不顯示異常值 | 'o' 、'+' 、'' |
vert | 箱線圖是否垂直顯示 | True (默認,垂直)、False (水平) |
whis | 控制須的范圍,默認為 1.5 倍四分位距(IQR) | 1.5 、3 、或一個表示上下限的列表 [lower, upper] |
positions | 設置每個箱型圖在 x 軸上的位置 | [1, 2, 4, 5] |
widths | 控制箱體的寬度 | 0.5 、[0.3, 0.5] |
patch_artist | 是否填充箱體顏色 | True (填充顏色)、False (默認,空心) |
meanline | 是否用線表示均值(與 showmeans 配合使用) | True 、False |
showmeans | 是否顯示均值 | True 、False |
showcaps | 是否顯示上下邊緣的橫線(帽線) | True 、False |
showbox | 是否顯示箱體 | True 、False |
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 , yerr | x 或 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 | 是否將誤差棒繪制在數據點/線之上 | True 、False |
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()
繪制的圖形如下圖所示: