文章目錄
- 一、圖表輔助元素簡介
- 二、坐標軸的標簽、刻度范圍和刻度標簽
- 1. 坐標軸標簽
- 1.1 x軸標簽
- 1.2 y軸標簽
- 1.3 示例:繪制天氣氣溫折線圖
- 2. 刻度范圍和刻度標簽
- 2.1 刻度范圍
- 2.1.1 x軸刻度范圍
- 2.1.2 y軸刻度范圍
- 2.2 刻度標簽
- 2.2.1 x軸刻度標簽
- 2.2.2 y軸刻度標簽
- 2.3 示例:繪制天氣氣溫折線圖
- 三、標題和圖例
- 1. 標題(Title)
- 2. 圖例(Legend)
- 3 示例:繪制天氣氣溫折線圖
- 4. 示例:繪制賬單餅圖
- 四、網格
- 1. 網格
- 2. 示例:繪制天氣氣溫折線圖
- 五、參考線和參考區域
- 1. 參考線
- 1.1 水平參考線
- 1.2 垂直參考線
- 1.3 示例:繪制天氣氣溫折線圖
- 2. 參考區域
- 2.1 水平參考區域
- 2.2 垂直參考區域
- 2.3 示例:繪制天氣氣溫折線圖
- 六、注釋文本
- 1. 指向型注釋文本
- 2. 無指向型注釋文本
- 3. 示例:繪制天氣氣溫折線圖
- 七、表格
- 1. 表格
- 2. 示例:繪制國內生產總值柱形圖
- 八、數據及代碼下載地址
一、圖表輔助元素簡介
在數據可視化中,除了核心的圖表內容(如折線、柱形、散點等),輔助元素是提升圖表可讀性、信息完整性和美觀度的關鍵組成部分。它們能夠幫助讀者快速理解圖表的主題、數據含義、坐標軸范圍以及數據間的關聯,是專業圖表不可或缺的一部分。
常見的圖表輔助元素包括以下幾類:
輔助元素類別 | 作用描述 | 典型使用場景 | 示例代碼(Matplotlib) |
---|---|---|---|
標題(Title) | 概括圖表核心內容,讓讀者快速了解數據主題 | 所有圖表均需,通常位于圖表上方 | plt.title("2021-2022年發電量對比", fontsize=12) |
坐標軸標簽 | 明確坐標軸代表的數據含義及單位,避免維度誤解 | 除極簡圖表外均需,尤其坐標軸無默認含義時 | plt.xlabel("年份") plt.ylabel("發電量(億千瓦時)") |
圖例(Legend) | 區分多數據系列(如多條折線、多組柱形)的含義 | 多數據系列圖表必須添加,位置需避免遮擋核心數據 | plt.legend(labels=["用戶1", "用戶2"], loc="upper right") |
網格線(Grid) | 通過參考線幫助讀者精準讀取數據值、比較差異 | 需精確讀取數據的圖表(折線圖、散點圖等),避免過密導致雜亂 | plt.grid(linestyle="--", alpha=0.7) (虛線樣式,透明度0.7) |
刻度與刻度標簽 | 刻度為坐標軸標記點,刻度標簽為對應數值,用于量化數據范圍 | 所有帶坐標軸的圖表,可自定義間隔(如時間序列按季度顯示) | plt.xticks(ticks=[1,2,3,4], labels=["Q1", "Q2", "Q3", "Q4"]) |
注釋(Annotation) | 對關鍵數據點、異常值或特殊趨勢補充說明,增強信息深度 | 數據存在需強調的特殊信息時(如政策節點、峰值),避免過度注釋 | plt.annotate("政策調整點", xy=(5, 120), xytext=(6, 130), arrowprops=dict(arrowstyle="->")) |
數據標簽 | 直接在圖表元素(柱形、扇形等)上標注具體數值,避免二次推測 | 數據量較少的圖表(餅圖、簡單柱形圖),數據過多易重疊 | 餅圖百分比標簽:plt.pie(values, autopct="%1.1f%%") |
背景與邊框 | 調整背景色、隱藏冗余邊框(如上、右邊框),減少視覺干擾,突出圖表內容 | 所有圖表均可優化,適合簡潔風格可視化 | plt.gca().spines["top"].set_visible(False) (隱藏上邊框) |
二、坐標軸的標簽、刻度范圍和刻度標簽
1. 坐標軸標簽
在 Matplotlib 中,可以通過 plt.xlabel()
和 plt.ylabel()
函數分別為 x軸 和 y軸 添加標簽,以增強圖表的可讀性和表達力。
1.1 x軸標簽
使用 plt.xlabel()
函數可以為 x軸 添加標簽。
參數名 | 描述 |
---|---|
xlabel | 要顯示的標簽文本(字符串) |
fontdict | 字體字典,用于設置字體大小、顏色、樣式等 |
labelpad | 標簽與坐標軸之間的距離(像素) |
loc | 標簽的位置,可選 'center' 、'left' 、'right' |
**kwargs | 其他文本屬性,如 color 、fontsize 、rotation 等 |
1.2 y軸標簽
使用 plt.ylabel()
函數可以為 y軸 添加標簽。
參數名 | 描述 |
---|---|
ylabel | 要顯示的標簽文本(字符串) |
fontdict | 字體字典,用于設置字體大小、顏色、樣式等 |
labelpad | 標簽與坐標軸之間的距離(像素) |
loc | 標簽的位置,可選 'center' 、'top' 、'bottom' |
**kwargs | 其他文本屬性,如 color 、fontsize 、rotation 等 |
1.3 示例:繪制天氣氣溫折線圖
數據如下圖所示,需要根據這個數據繪制氣溫折線圖,并設置x軸和y軸標簽。
實現代碼如下所示:
import matplotlib.pyplot as plt
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 請將此處替換為你的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()# 設置 x 軸的標簽(xlabel)
plt.xlabel(xlabel='日 期', # 標簽內容,顯示為“日 期”fontdict={'fontsize': 12, 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=10, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 x 軸上的對齊方式,'center' 表示居中對齊
)# 設置 y 軸的標簽(ylabel)
plt.ylabel(ylabel='氣 溫', # 標簽內容,顯示為“氣 溫”fontdict={'fontsize': 12, 'color': '#000', 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=5, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 y 軸上的對齊方式,'center' 表示居中對齊
)# 顯示圖形
plt.show()
繪制的圖形如下圖所示:
2. 刻度范圍和刻度標簽
2.1 刻度范圍
2.1.1 x軸刻度范圍
使用 plt.xlim()
函數可以設置或獲取 x軸的顯示范圍。
參數名 | 描述 | 示例 |
---|---|---|
*args | 可以是一個元組 (xmin, xmax) ,也可以是兩個參數 xmin, xmax | plt.xlim((0, 5)) 或 plt.xlim(0, 5) |
emit | 是否通知圖形更新(一般無需修改) | 默認為 True |
auto | 是否自動調整刻度范圍 | plt.xlim(auto=True) |
xmin | 設置x軸的最小值 | plt.xlim(xmin=1) |
xmax | 設置x軸的最大值 | plt.xlim(xmax=10) |
2.1.2 y軸刻度范圍
使用 plt.ylim()
函數可以設置或獲取 y軸的顯示范圍。
參數名 | 描述 | 示例 |
---|---|---|
*args | 可以是一個元組 (ymin, ymax) ,也可以是兩個參數 ymin, ymax | plt.ylim((0, 6)) 或 plt.ylim(0, 6) |
emit | 是否通知圖形更新 | 默認為 True |
auto | 是否自動調整刻度范圍 | plt.ylim(auto=True) |
ymin | 設置y軸的最小值 | plt.ylim(ymin=1) |
ymax | 設置y軸的最大值 | plt.ylim(ymax=10) |
2.2 刻度標簽
2.2.1 x軸刻度標簽
使用 plt.xticks()
函數可以設置 x軸刻度的位置和對應的標簽。
參數名 | 描述 | 示例 |
---|---|---|
ticks | 指定刻度位置的列表 | ticks=[0, 1, 2] |
labels | 對應每個刻度位置的標簽列表 | labels=['A', 'B', 'C'] |
rotation | 標簽旋轉角度 | rotation=45 |
fontsize | 標簽字體大小 | fontsize=12 |
color | 標簽顏色 | color='red' |
2.2.2 y軸刻度標簽
使用 plt.yticks()
函數可以設置 y軸刻度的位置和對應的標簽。
參數名 | 描述 | 示例 |
---|---|---|
ticks | 指定刻度位置的列表 | ticks=[0, 2, 4] |
labels | 對應每個刻度位置的標簽列表 | labels=['低', '中', '高'] |
rotation | 標簽旋轉角度 | rotation=90 |
fontsize | 標簽字體大小 | fontsize=12 |
color | 標簽顏色 | color='red' |
2.3 示例:繪制天氣氣溫折線圖
數據如下圖所示,需要根據這個數據繪制氣溫折線圖,并設置x軸和y軸的刻度范圍和刻度標簽。
實現代碼如下所示:
from datetime import datetimeimport matplotlib.pyplot as plt
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 請將此處替換為你的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()# 設置 x 軸的標簽(xlabel)
plt.xlabel(xlabel='日 期', # 標簽內容,顯示為“日 期”fontdict={'fontsize': 12, 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=10, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 x 軸上的對齊方式,'center' 表示居中對齊
)# 設置 y 軸的標簽(ylabel)
plt.ylabel(ylabel='氣 溫', # 標簽內容,顯示為“氣 溫”fontdict={'fontsize': 12, 'color': '#000', 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=5, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 y 軸上的對齊方式,'center' 表示居中對齊
)# 設置 x 軸(時間)的顯示范圍
# 從 2025年7月8日 開始,到 2025年7月25日 結束
start_time = datetime(2025, 7, 8)
end_time = datetime(2025, 7, 25)# 設置 x 軸的范圍(時間范圍)
plt.xlim((start_time, end_time))# 設置 y 軸的數值范圍,從 13 到 26
plt.ylim(ymin=13, ymax=26)# 設置 x 軸的刻度位置和刻度標簽
# rotation:刻度標簽旋轉角度(30度)
# color:刻度標簽顏色(藍色系)
# fontsize:字體大小
# ticks:指定刻度的位置(字符串日期)
# labels:對應每個刻度位置的顯示標簽(中文格式)
plt.xticks(rotation=30,color='#09f',fontsize=10,ticks=['2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12', '2025-07-13','2025-07-14', '2025-07-15', '2025-07-16', '2025-07-17', '2025-07-18','2025-07-19', '2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23','2025-07-24', '2025-07-25'],labels=['9日', '10日', '11日', '12日', '13日', '14日', '15日', '16日','17日', '18日', '19日', '20日', '21日', '22日', '23日', '24日', '25日'])# 設置 y 軸的刻度位置和刻度標簽
# rotation:標簽旋轉角度
# color:標簽顏色
# fontsize:字體大小
# ticks:刻度位置
# labels:顯示的標簽(添加了溫度單位 ℃)
plt.yticks(rotation=30,color='#09f',fontsize=10,ticks=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],labels=['13℃', '14℃', '15℃', '16℃', '17℃', '18℃', '19℃', '20℃','21℃', '22℃', '23℃', '24℃', '25℃', '26℃'])# 顯示圖形
plt.show()
繪制的圖形如下圖所示:
三、標題和圖例
在 Matplotlib 中,標題(Title) 和 圖例(Legend) 是圖表中非常重要的組成部分,它們可以增強圖表的可讀性和表達能力,幫助讀者更好地理解圖表內容。
1. 標題(Title)
使用 plt.title()
函數可以為當前圖表添加一個標題。
參數名 | 描述 | 示例 |
---|---|---|
label | 標題文本內容 | '氣溫變化趨勢圖' |
fontdict | 字體字典,用于設置字體大小、顏色、樣式等 | {'fontsize': 14, 'color': 'red'} |
loc | 標題位置,可選 'center' 、'left' 、'right' | 'center' |
pad | 標題與圖表頂部之間的間距(像素) | 20 |
**kwargs | 其他文本屬性,如 color , fontsize , rotation 等 | color='blue', fontsize=12 |
2. 圖例(Legend)
使用 plt.legend()
函數可以為圖表添加圖例,用于說明每條曲線或每個圖形對象的含義。
參數名 | 描述 | 示例 |
---|---|---|
labels | 圖例標簽列表 | ['曲線A', '曲線B'] |
loc | 圖例位置,常用 'upper right' , 'lower left' , 'center' 等 | 'upper right' |
bbox_to_anchor | 圖例錨點位置(用于精確定位) | (1.05, 1) |
ncol | 圖例列數 | 2 |
title | 圖例標題 | '圖例說明' |
fontsize | 圖例字體大小 | 10 |
frameon | 是否顯示圖例邊框 | False |
shadow | 是否添加陰影 | True |
markerscale | 圖例中點標記的大小縮放比例 | 1.5 |
圖例位置編碼和字符串說明:
位置編碼 | 字符串描述 | 位置描述 |
---|---|---|
0 | 'best' | 自動選擇最佳位置(避免與其他元素重疊) |
1 | 'upper right' | 右上角 |
2 | 'upper left' | 左上角 |
3 | 'lower left' | 左下角 |
4 | 'lower right' | 右下角 |
5 | 'right' | 右側中心 |
6 | 'center left' | 中心左側 |
7 | 'center right' | 中心右側 |
8 | 'lower center' | 下方中心 |
9 | 'upper center' | 上方中心 |
10 | 'center' | 正中間 |
3 示例:繪制天氣氣溫折線圖
數據如下圖所示,需要根據這個數據繪制氣溫折線圖,并設置x軸和y軸的刻度范圍和刻度標簽,以及標題和圖例。
實現代碼如下所示:
from datetime import datetimeimport matplotlib.pyplot as plt
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 請將此處替換為你的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()# 設置 x 軸的標簽(xlabel)
plt.xlabel(xlabel='日 期', # 標簽內容,顯示為“日 期”fontdict={'fontsize': 12, 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=10, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 x 軸上的對齊方式,'center' 表示居中對齊
)# 設置 y 軸的標簽(ylabel)
plt.ylabel(ylabel='氣 溫', # 標簽內容,顯示為“氣 溫”fontdict={'fontsize': 12, 'color': '#000', 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=5, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 y 軸上的對齊方式,'center' 表示居中對齊
)# 設置 x 軸(時間)的顯示范圍
# 從 2025年7月8日 開始,到 2025年7月25日 結束
start_time = datetime(2025, 7, 8)
end_time = datetime(2025, 7, 25)# 設置 x 軸的范圍(時間范圍)
plt.xlim((start_time, end_time))# 設置 y 軸的數值范圍,從 13 到 26
plt.ylim(ymin=13, ymax=26)# 設置 x 軸的刻度位置和刻度標簽
# rotation:刻度標簽旋轉角度(30度)
# color:刻度標簽顏色(藍色系)
# fontsize:字體大小
# ticks:指定刻度的位置(字符串日期)
# labels:對應每個刻度位置的顯示標簽(中文格式)
plt.xticks(rotation=30,color='#09f',fontsize=10,ticks=['2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12', '2025-07-13','2025-07-14', '2025-07-15', '2025-07-16', '2025-07-17', '2025-07-18','2025-07-19', '2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23','2025-07-24', '2025-07-25'],labels=['9日', '10日', '11日', '12日', '13日', '14日', '15日', '16日','17日', '18日', '19日', '20日', '21日', '22日', '23日', '24日', '25日'])# 設置 y 軸的刻度位置和刻度標簽
# rotation:標簽旋轉角度
# color:標簽顏色
# fontsize:字體大小
# ticks:刻度位置
# labels:顯示的標簽(添加了溫度單位 ℃)
plt.yticks(rotation=30,color='#09f',fontsize=10,ticks=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],labels=['13℃', '14℃', '15℃', '16℃', '17℃', '18℃', '19℃', '20℃','21℃', '22℃', '23℃', '24℃', '25℃', '26℃'])# 設置圖表標題
plt.title(label='2025年7月8日至2025年7月25日的氣溫變化', # 標題內容fontdict={'fontsize': 14, 'color': '#09f'}, # 字體樣式:大小14,顏色為藍色(#09f)loc='center', # 標題對齊方式:居中pad=10, # 標題與圖表頂部的距離(以像素為單位)fontweight='bold', # 字體加粗(此參數可被 fontdict 覆蓋)color='red', # 標題文字顏色(若設置,會覆蓋 fontdict 中的顏色)backgroundcolor='lightblue' # 設置標題背景顏色為淺藍色
)# 設置圖例(legend)
plt.legend(labels=['最高氣溫', '最低氣溫'], # 圖例中顯示的標簽名稱loc='lower left', # 圖例放置的位置:左下角ncol=1, # 圖例分為1列(縱向排列)title='天氣溫度', # 圖例的標題fontsize=10, # 圖例文字的字體大小frameon=True, # 是否顯示圖例邊框edgecolor='blue', # 圖例邊框顏色facecolor='lightblue', # 圖例背景顏色shadow=True, # 是否添加陰影效果fancybox=True # 是否使用圓角邊框(False 為直角)
)# 顯示圖形
plt.show()
繪制的圖形如下圖所示:
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.title(label='賬單餅圖', # 標題文本內容color='blue', # 標題文字顏色為藍色backgroundcolor='lightblue', # 標題背景顏色為淺藍色pad=0 # 標題與圖表頂部的距離(以像素為單位),這里設置為0,即沒有額外的間距
)# 設置圖例(legend)
plt.legend(labels=labels, # 圖例中顯示的標簽名稱列表,這里的 `labels` 應該是一個預定義好的列表變量bbox_to_anchor=(1.25, 1.11), # 圖例框的位置,(x, y) 坐標。相對于圖形邊界或圖形本身的位置取決于使用的布局管理器facecolor='lightblue' # 圖例背景顏色為淺藍色
)# 調用plt.show()函數顯示圖形結果。這是展示已創建圖表的必要步驟。
plt.show()
繪制的圖形如下圖所示:
四、網格
1. 網格
在Matplotlib中,網格(Grid)是用于輔助觀察數據點的位置而添加的背景線。通過使用 plt.grid()
方法,可以輕松地為圖表添加或移除網格線。
以下表格詳細介紹了 plt.grid()
方法的主要參數:
參數名 | 描述 | 可選值/格式 | 示例 |
---|---|---|---|
visible | 開啟或關閉網格 | True 或 False | True (開啟網格) |
which | 選擇應用網格的刻度類型 | 'major' , 'minor' , 'both' | 'both' (同時應用于主次刻度) |
axis | 選擇應用網格的軸方向 | 'x' , 'y' , 'both' | 'x' (僅應用于X軸) |
**kwargs | 網格屬性設置,如顏色、樣式等 | 例如:color='blue' , linestyle='--' | color='green', linestyle=':' |
2. 示例:繪制天氣氣溫折線圖
數據如下圖所示,需要根據這個數據繪制氣溫折線圖,并設置x軸和y軸的刻度范圍和刻度標簽、標題、圖例和網格線。
實現代碼如下所示:
from datetime import datetimeimport matplotlib.pyplot as plt
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 請將此處替換為你的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()# 設置 x 軸的標簽(xlabel)
plt.xlabel(xlabel='日 期', # 標簽內容,顯示為“日 期”fontdict={'fontsize': 12, 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=10, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 x 軸上的對齊方式,'center' 表示居中對齊
)# 設置 y 軸的標簽(ylabel)
plt.ylabel(ylabel='氣 溫', # 標簽內容,顯示為“氣 溫”fontdict={'fontsize': 12, 'color': '#000', 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=5, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 y 軸上的對齊方式,'center' 表示居中對齊
)# 設置 x 軸(時間)的顯示范圍
# 從 2025年7月8日 開始,到 2025年7月25日 結束
start_time = datetime(2025, 7, 8)
end_time = datetime(2025, 7, 25)# 設置 x 軸的范圍(時間范圍)
plt.xlim((start_time, end_time))# 設置 y 軸的數值范圍,從 13 到 26
plt.ylim(ymin=13, ymax=26)# 設置 x 軸的刻度位置和刻度標簽
# rotation:刻度標簽旋轉角度(30度)
# color:刻度標簽顏色(藍色系)
# fontsize:字體大小
# ticks:指定刻度的位置(字符串日期)
# labels:對應每個刻度位置的顯示標簽(中文格式)
plt.xticks(rotation=30,color='#09f',fontsize=10,ticks=['2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12', '2025-07-13','2025-07-14', '2025-07-15', '2025-07-16', '2025-07-17', '2025-07-18','2025-07-19', '2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23','2025-07-24', '2025-07-25'],labels=['9日', '10日', '11日', '12日', '13日', '14日', '15日', '16日','17日', '18日', '19日', '20日', '21日', '22日', '23日', '24日', '25日'])# 設置 y 軸的刻度位置和刻度標簽
# rotation:標簽旋轉角度
# color:標簽顏色
# fontsize:字體大小
# ticks:刻度位置
# labels:顯示的標簽(添加了溫度單位 ℃)
plt.yticks(rotation=30,color='#09f',fontsize=10,ticks=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],labels=['13℃', '14℃', '15℃', '16℃', '17℃', '18℃', '19℃', '20℃','21℃', '22℃', '23℃', '24℃', '25℃', '26℃'])# 設置圖表標題
plt.title(label='2025年7月8日至2025年7月25日的氣溫變化', # 標題內容fontdict={'fontsize': 14, 'color': '#09f'}, # 字體樣式:大小14,顏色為藍色(#09f)loc='center', # 標題對齊方式:居中pad=10, # 標題與圖表頂部的距離(以像素為單位)fontweight='bold', # 字體加粗(此參數可被 fontdict 覆蓋)color='red', # 標題文字顏色(若設置,會覆蓋 fontdict 中的顏色)backgroundcolor='lightblue' # 設置標題背景顏色為淺藍色
)# 設置圖例(legend)
plt.legend(labels=['最高氣溫', '最低氣溫'], # 圖例中顯示的標簽名稱loc='lower left', # 圖例放置的位置:左下角ncol=1, # 圖例分為1列(縱向排列)title='天氣溫度', # 圖例的標題fontsize=10, # 圖例文字的字體大小frameon=True, # 是否顯示圖例邊框edgecolor='blue', # 圖例邊框顏色facecolor='lightblue', # 圖例背景顏色shadow=True, # 是否添加陰影效果fancybox=True # 是否使用圓角邊框(False 為直角)
)# 設置圖表網格線
plt.grid(visible=True, # 是否顯示網格線,設置為 True 表示顯示網格線which='both', # 應用于哪種刻度線('major' 主刻度,'minor' 次刻度,'both' 兩者都應用)axis='both', # 在哪個軸上顯示網格線('x' x軸,'y' y軸,'both' 兩個軸都顯示)linestyle='--', # 網格線的樣式,這里是虛線color='lightblue', # 網格線的顏色,這里設置為淺藍色alpha=0.5, # 網格線的透明度,范圍是0到1,數值越低越透明linewidth=1, # 網格線的寬度dashes=(5, 5) # 虛線的樣式,元組中的第一個數字表示實線部分長度,第二個數字表示間隔長度
)# 顯示圖形
plt.show()
繪制的圖形如下圖所示:
五、參考線和參考區域
在數據可視化中,參考線(Reference Lines) 和 參考區域(Reference Areas) 是非常有用的工具,可以突出顯示特定的數據值、閾值或范圍,從而增強圖表的信息傳達能力。
1. 參考線
1.1 水平參考線
使用 plt.axhline()
函數可以在圖表中添加一條水平參考線。這條線會橫跨整個繪圖區域的寬度,并且可以設置其位置、顏色、樣式等屬性。
參數名 | 描述 | 示例 |
---|---|---|
y | 水平線的 y 軸位置(默認為 0) | y=5 |
xmin | 線條起始的 x 軸相對位置(0 到 1,左端為 0) | xmin=0.2 |
xmax | 線條結束的 x 軸相對位置(0 到 1,右端為 1) | xmax=0.8 |
**kwargs | 其他線條屬性,如 color , linestyle , linewidth , label 等 | color='red', linestyle='--', linewidth=2 |
1.2 垂直參考線
使用 plt.axvline()
函數可以在圖表中添加一條垂直參考線。這條線會縱貫整個繪圖區域的高度。
參數名 | 描述 | 示例 |
---|---|---|
x | 垂直線的 x 軸位置(默認為 0) | x=2.5 |
ymin | 線條起始的 y 軸相對位置(0 到 1,底端為 0) | ymin=0.2 |
ymax | 線條結束的 y 軸相對位置(0 到 1,頂端為 1) | ymax=0.8 |
**kwargs | 其他線條屬性,如 color , linestyle , linewidth , label 等 | color='blue', linestyle=':', linewidth=1.5 |
1.3 示例:繪制天氣氣溫折線圖
數據如下圖所示,需要根據這個數據繪制氣溫折線圖,并設置x軸和y軸的刻度范圍和刻度標簽、標題、圖例、網格線和參考線。
實現代碼如下所示:
from datetime import datetimeimport matplotlib.pyplot as plt
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 請將此處替換為你的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()# 設置 x 軸的標簽(xlabel)
plt.xlabel(xlabel='日 期', # 標簽內容,顯示為“日 期”fontdict={'fontsize': 12, 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=10, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 x 軸上的對齊方式,'center' 表示居中對齊
)# 設置 y 軸的標簽(ylabel)
plt.ylabel(ylabel='氣 溫', # 標簽內容,顯示為“氣 溫”fontdict={'fontsize': 12, 'color': '#000', 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=5, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 y 軸上的對齊方式,'center' 表示居中對齊
)# 設置 x 軸(時間)的顯示范圍
# 從 2025年7月8日 開始,到 2025年7月25日 結束
start_time = datetime(2025, 7, 8)
end_time = datetime(2025, 7, 25)# 設置 x 軸的范圍(時間范圍)
plt.xlim((start_time, end_time))# 設置 y 軸的數值范圍,從 13 到 26
plt.ylim(ymin=13, ymax=26)# 設置 x 軸的刻度位置和刻度標簽
# rotation:刻度標簽旋轉角度(30度)
# color:刻度標簽顏色(藍色系)
# fontsize:字體大小
# ticks:指定刻度的位置(字符串日期)
# labels:對應每個刻度位置的顯示標簽(中文格式)
plt.xticks(rotation=30,color='#09f',fontsize=10,ticks=['2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12', '2025-07-13','2025-07-14', '2025-07-15', '2025-07-16', '2025-07-17', '2025-07-18','2025-07-19', '2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23','2025-07-24', '2025-07-25'],labels=['9日', '10日', '11日', '12日', '13日', '14日', '15日', '16日','17日', '18日', '19日', '20日', '21日', '22日', '23日', '24日', '25日'])# 設置 y 軸的刻度位置和刻度標簽
# rotation:標簽旋轉角度
# color:標簽顏色
# fontsize:字體大小
# ticks:刻度位置
# labels:顯示的標簽(添加了溫度單位 ℃)
plt.yticks(rotation=30,color='#09f',fontsize=10,ticks=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],labels=['13℃', '14℃', '15℃', '16℃', '17℃', '18℃', '19℃', '20℃','21℃', '22℃', '23℃', '24℃', '25℃', '26℃'])# 設置圖表標題
plt.title(label='2025年7月8日至2025年7月25日的氣溫變化', # 標題內容fontdict={'fontsize': 14, 'color': '#09f'}, # 字體樣式:大小14,顏色為藍色(#09f)loc='center', # 標題對齊方式:居中pad=10, # 標題與圖表頂部的距離(以像素為單位)fontweight='bold', # 字體加粗(此參數可被 fontdict 覆蓋)color='red', # 標題文字顏色(若設置,會覆蓋 fontdict 中的顏色)backgroundcolor='lightblue' # 設置標題背景顏色為淺藍色
)# 設置圖表網格線
plt.grid(visible=True, # 是否顯示網格線,設置為 True 表示顯示網格線which='both', # 應用于哪種刻度線('major' 主刻度,'minor' 次刻度,'both' 兩者都應用)axis='both', # 在哪個軸上顯示網格線('x' x軸,'y' y軸,'both' 兩個軸都顯示)linestyle='--', # 網格線的樣式,這里是虛線color='lightblue', # 網格線的顏色,這里設置為淺藍色alpha=0.5, # 網格線的透明度,范圍是0到1,數值越低越透明linewidth=1, # 網格線的寬度dashes=(5, 5) # 虛線的樣式,元組中的第一個數字表示實線部分長度,第二個數字表示間隔長度
)# 繪制一條水平直線,表示“最高氣溫”的平均值
plt.axhline(y=df['最高氣溫'].mean(), # 水平線的 y 值,即最高氣溫的平均值color='red', # 線條顏色為紅色xmin=0.11, # 線條起始位置(x軸左側比例),0表示最左,1表示最右xmax=0.95, # 線條結束位置(x軸右側比例)linestyle='--', # 線條樣式為虛線linewidth=1, # 線條寬度label='平均最高氣溫' # 為該線條添加圖例標簽,后續調用 plt.legend() 時會顯示
)# 繪制另一條水平直線,表示“最低氣溫”的平均值
plt.axhline(y=df['最低氣溫'].mean(), # 水平線的 y 值,即最低氣溫的平均值color='blue', # 線條顏色為藍色xmin=0.11, # 同上,線條起始位置xmax=0.95, # 同上,線條結束位置dashes=(5, 3), # 自定義虛線樣式,5像素實線 + 3像素空白linewidth=1, # 線條寬度label='平均最低氣溫' # 圖例標簽
)# 繪制一條垂直直線,表示某個特定日期(2025年7月21日)
plt.axvline(x=datetime(2025, 7, 21), # 垂直線的 x 值,這里是一個具體的日期(需要提前導入 datetime 模塊)color='#b65', # 使用十六進制顏色碼定義線條顏色(一種橙色調)linestyle='--', # 虛線樣式label='2025-07-21' # 圖例標簽
)# 設置圖例(legend)
plt.legend(labels=['最高氣溫', '最低氣溫', '平均最高氣溫', '平均最低氣溫', '2025-07-21'], # 圖例中顯示的標簽名稱loc='lower left', # 圖例放置的位置:左下角ncol=3, # 圖例分為1列(縱向排列)title='天氣溫度', # 圖例的標題fontsize=10, # 圖例文字的字體大小frameon=True, # 是否顯示圖例邊框edgecolor='blue', # 圖例邊框顏色facecolor='lightblue', # 圖例背景顏色shadow=True, # 是否添加陰影效果fancybox=True # 是否使用圓角邊框(False 為直角)
)# 顯示圖形
plt.show()
繪制的圖形如下圖所示:
2. 參考區域
參考區域(Reference Area)用于在圖表中高亮顯示某一范圍,常用于突出顯示數據的正常區間、異常區間或趨勢變化區域。
2.1 水平參考區域
使用 plt.axhspan()
函數可以在圖表中添加一個水平方向的矩形區域(即 y 軸方向上的高亮區域)。
參數名 | 描述 | 示例 |
---|---|---|
ymin | 區域下邊界(y軸值) | ymin=2 |
ymax | 區域上邊界(y軸值) | ymax=4 |
xmin | 區域起始的 x 軸比例位置(0 到 1) | xmin=0.1 |
xmax | 區域結束的 x 軸比例位置(0 到 1) | xmax=0.9 |
color | 區域填充顏色 | color='yellow' |
alpha | 透明度(0 為完全透明,1 為不透明) | alpha=0.3 |
zorder | 層級順序(數值越大越靠上) | zorder=0 |
hatch | 填充圖案(如 '/' , '\\' , 'x' 等) | hatch='//' |
2.2 垂直參考區域
使用 plt.axvspan()
函數可以在圖表中添加一個垂直方向的矩形區域(即 x 軸方向上的高亮區域)。
參數名 | 描述 | 示例 |
---|---|---|
xmin | 區域左邊界(x軸值) | xmin=1.5 |
xmax | 區域右邊界(x軸值) | xmax=3.5 |
ymin | 區域起始的 y 軸比例位置(0 到 1) | ymin=0.1 |
ymax | 區域結束的 y 軸比例位置(0 到 1) | ymax=0.9 |
color | 區域填充顏色 | color='lightblue' |
alpha | 透明度 | alpha=0.4 |
zorder | 層級順序 | zorder=0 |
hatch | 填充圖案 | hatch='x' |
2.3 示例:繪制天氣氣溫折線圖
數據如下圖所示,需要根據這個數據繪制氣溫折線圖,并設置x軸和y軸的刻度范圍和刻度標簽、標題、圖例、網格線、參考線和參考區域。
實現代碼如下所示:
from datetime import datetimeimport matplotlib.pyplot as plt
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 請將此處替換為你的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()# 設置 x 軸的標簽(xlabel)
plt.xlabel(xlabel='日 期', # 標簽內容,顯示為“日 期”fontdict={'fontsize': 12, 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=10, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 x 軸上的對齊方式,'center' 表示居中對齊
)# 設置 y 軸的標簽(ylabel)
plt.ylabel(ylabel='氣 溫', # 標簽內容,顯示為“氣 溫”fontdict={'fontsize': 12, 'color': '#000', 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=5, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 y 軸上的對齊方式,'center' 表示居中對齊
)# 設置 x 軸(時間)的顯示范圍
# 從 2025年7月8日 開始,到 2025年7月25日 結束
start_time = datetime(2025, 7, 8)
end_time = datetime(2025, 7, 25)# 設置 x 軸的范圍(時間范圍)
plt.xlim((start_time, end_time))# 設置 y 軸的數值范圍,從 13 到 26
plt.ylim(ymin=13, ymax=26)# 設置 x 軸的刻度位置和刻度標簽
# rotation:刻度標簽旋轉角度(30度)
# color:刻度標簽顏色(藍色系)
# fontsize:字體大小
# ticks:指定刻度的位置(字符串日期)
# labels:對應每個刻度位置的顯示標簽(中文格式)
plt.xticks(rotation=30,color='#09f',fontsize=10,ticks=['2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12', '2025-07-13','2025-07-14', '2025-07-15', '2025-07-16', '2025-07-17', '2025-07-18','2025-07-19', '2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23','2025-07-24', '2025-07-25'],labels=['9日', '10日', '11日', '12日', '13日', '14日', '15日', '16日','17日', '18日', '19日', '20日', '21日', '22日', '23日', '24日', '25日'])# 設置 y 軸的刻度位置和刻度標簽
# rotation:標簽旋轉角度
# color:標簽顏色
# fontsize:字體大小
# ticks:刻度位置
# labels:顯示的標簽(添加了溫度單位 ℃)
plt.yticks(rotation=30,color='#09f',fontsize=10,ticks=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],labels=['13℃', '14℃', '15℃', '16℃', '17℃', '18℃', '19℃', '20℃','21℃', '22℃', '23℃', '24℃', '25℃', '26℃'])# 設置圖表標題
plt.title(label='2025年7月8日至2025年7月25日的氣溫變化', # 標題內容fontdict={'fontsize': 14, 'color': '#09f'}, # 字體樣式:大小14,顏色為藍色(#09f)loc='center', # 標題對齊方式:居中pad=10, # 標題與圖表頂部的距離(以像素為單位)fontweight='bold', # 字體加粗(此參數可被 fontdict 覆蓋)color='red', # 標題文字顏色(若設置,會覆蓋 fontdict 中的顏色)backgroundcolor='lightblue' # 設置標題背景顏色為淺藍色
)# 設置圖表網格線
plt.grid(visible=True, # 是否顯示網格線,設置為 True 表示顯示網格線which='both', # 應用于哪種刻度線('major' 主刻度,'minor' 次刻度,'both' 兩者都應用)axis='both', # 在哪個軸上顯示網格線('x' x軸,'y' y軸,'both' 兩個軸都顯示)linestyle='--', # 網格線的樣式,這里是虛線color='lightblue', # 網格線的顏色,這里設置為淺藍色alpha=0.5, # 網格線的透明度,范圍是0到1,數值越低越透明linewidth=1, # 網格線的寬度dashes=(5, 5) # 虛線的樣式,元組中的第一個數字表示實線部分長度,第二個數字表示間隔長度
)# 繪制一條水平直線,表示“最高氣溫”的平均值
plt.axhline(y=df['最高氣溫'].mean(), # 水平線的 y 值,即最高氣溫的平均值color='red', # 線條顏色為紅色xmin=0.11, # 線條起始位置(x軸左側比例),0表示最左,1表示最右xmax=0.95, # 線條結束位置(x軸右側比例)linestyle='--', # 線條樣式為虛線linewidth=1, # 線條寬度label='平均最高氣溫' # 為該線條添加圖例標簽,后續調用 plt.legend() 時會顯示
)# 繪制另一條水平直線,表示“最低氣溫”的平均值
plt.axhline(y=df['最低氣溫'].mean(), # 水平線的 y 值,即最低氣溫的平均值color='blue', # 線條顏色為藍色xmin=0.11, # 同上,線條起始位置xmax=0.95, # 同上,線條結束位置dashes=(5, 3), # 自定義虛線樣式,5像素實線 + 3像素空白linewidth=1, # 線條寬度label='平均最低氣溫' # 圖例標簽
)# 繪制一條垂直直線,表示某個特定日期(2025年7月21日)
plt.axvline(x=datetime(2025, 7, 21), # 垂直線的 x 值,這里是一個具體的日期(需要提前導入 datetime 模塊)color='#b65', # 使用十六進制顏色碼定義線條顏色(一種橙色調)linestyle='--', # 虛線樣式label='2025-07-21' # 圖例標簽
)# 設置圖例(legend)
plt.legend(labels=['最高氣溫', '最低氣溫', '平均最高氣溫', '平均最低氣溫', '2025-07-21'], # 圖例中顯示的標簽名稱loc='lower left', # 圖例放置的位置:左下角ncol=3, # 圖例分為1列(縱向排列)title='天氣溫度', # 圖例的標題fontsize=10, # 圖例文字的字體大小frameon=True, # 是否顯示圖例邊框edgecolor='blue', # 圖例邊框顏色facecolor='lightblue', # 圖例背景顏色shadow=True, # 是否添加陰影效果fancybox=True # 是否使用圓角邊框(False 為直角)
)# 繪制一個水平方向的跨度(矩形區域),表示特定范圍內的氣溫區間
plt.axhspan(ymin=23, # 矩形區域下邊界的 y 值(此處為溫度)ymax=24.5, # 矩形區域上邊界的 y 值xmin=0.1, # 矩形區域左邊界的 x 軸比例(從x軸起點開始的比例)xmax=0.95, # 矩形區域右邊界的 x 軸比例(到x軸終點的比例)color='lightblue', # 區域填充顏色alpha=0.6, # 透明度,范圍是0到1,數值越小越透明zorder=0, # 圖層順序,值越小越靠后,默認背景層級hatch='///' # 填充模式,這里使用斜線填充
)# 繪制一個垂直方向的跨度(矩形區域),強調特定時間段
plt.axvspan(xmin=datetime(2025, 7, 20), # 矩形區域左邊界的時間點(起始日期時間)xmax=datetime(2025, 7, 22), # 矩形區域右邊界的時間點(結束日期時間)需要導入 datetime 模塊ymin=0.05, # 矩形區域下邊界的 y 軸比例(從y軸起點開始的比例)ymax=0.96, # 矩形區域上邊界的 y 軸比例(到y軸終點的比例)color='lightblue', # 區域填充顏色alpha=0.6, # 透明度zorder=0, # 圖層順序hatch='///' # 填充模式,這里使用斜線填充
)# 顯示圖形
plt.show()
繪制的圖形如下圖所示:
當然可以!以下是 “注釋文本” 部分的完整內容,包含:
- 6.1 指向型注釋文本:使用
plt.annotate()
方法; - 6.2 無指向型注釋文本:使用
plt.text()
方法;
每個方法都配有詳細的 參數說明表格 和 示例代碼,幫助你掌握如何在圖表中添加文字注釋。
六、注釋文本
在 Matplotlib 中,注釋文本 是一種用于在圖表中添加說明性文字的方式,可以用于標注關鍵點、解釋趨勢或強調特定區域。
1. 指向型注釋文本
使用 plt.annotate()
函數可以添加一個帶有箭頭指向的注釋文本,非常適合標注圖表中的特定數據點。
參數名 | 描述 | 示例 |
---|---|---|
text | 注釋文本內容 | '最大值' |
xy | 被注釋點的坐標(x, y) | (2, 4) |
xytext | 注釋文本的位置坐標 | (30, 40) |
xycoords | 被注釋點坐標的參考系 | 'data' , 'axes fraction' |
textcoords | 注釋文本位置的參考系 | 'offset points' , 'data' |
arrowprops | 箭頭屬性字典 | dict(arrowstyle='->', color='red') |
fontsize | 字體大小 | 10 |
color | 文字顏色 | 'blue' |
ha | 水平對齊方式('left' , 'center' , 'right' ) | 'center' |
va | 垂直對齊方式('top' , 'center' , 'bottom' ) | 'bottom' |
arrowstyle的參數取值及對應的樣式:
取值 | 樣式 |
---|---|
- | — |
<- | ← |
-> | → |
<-> | ? |
<|- | ← |
--> | → |
<|- | > |
fancy | ? |
]- | ]– |
-[ | –[ |
]-[ | ]–[ |
|- | |
]-> | ]→ |
<-[ | ←[ |
simple | ? |
wedge | ─ |
2. 無指向型注釋文本
使用 plt.text()
函數可以添加一個不帶箭頭的注釋文本,用于在圖表的指定位置添加靜態說明性文字。
參數名 | 描述 | 示例 |
---|---|---|
x , y | 注釋文本的位置坐標(數據坐標) | x=2, y=10 |
s | 注釋文本內容 | '注意區域' |
fontdict | 字體字典,控制字體樣式 | {'size': 12, 'color': 'green'} |
fontsize | 字體大小 | 10 |
color | 文字顏色 | 'purple' |
rotation | 文字旋轉角度 | 45 |
ha | 水平對齊方式('left' , 'center' , 'right' ) | 'center' |
va | 垂直對齊方式('top' , 'center' , 'bottom' ) | 'bottom' |
3. 示例:繪制天氣氣溫折線圖
數據如下圖所示,需要根據這個數據繪制氣溫折線圖,并設置x軸和y軸的刻度范圍和刻度標簽、標題、圖例、網格線、參考線、參考區域和注釋文本。
實現代碼如下所示:
from datetime import datetimeimport matplotlib.pyplot as plt
import pandas as pd# 設置中文字體為 SimHei(黑體),確保中文標簽可以正常顯示(可選)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解決負號 '-' 顯示為方塊的問題,保證負號正常顯示
plt.rcParams['axes.unicode_minus'] = False# 請將此處替換為你的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()# 設置 x 軸的標簽(xlabel)
plt.xlabel(xlabel='日 期', # 標簽內容,顯示為“日 期”fontdict={'fontsize': 12, 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=10, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 x 軸上的對齊方式,'center' 表示居中對齊
)# 設置 y 軸的標簽(ylabel)
plt.ylabel(ylabel='氣 溫', # 標簽內容,顯示為“氣 溫”fontdict={'fontsize': 12, 'color': '#000', 'color': '#000', 'fontweight': 'bold'}, # 設置字體樣式:字體大小12,顏色為黑色,加粗labelpad=5, # 標簽與坐標軸之間的距離(以像素為單位)loc='center' # 標簽在 y 軸上的對齊方式,'center' 表示居中對齊
)# 設置 x 軸(時間)的顯示范圍
# 從 2025年7月8日 開始,到 2025年7月25日 結束
start_time = datetime(2025, 7, 8)
end_time = datetime(2025, 7, 25)# 設置 x 軸的范圍(時間范圍)
plt.xlim((start_time, end_time))# 設置 y 軸的數值范圍,從 13 到 26
plt.ylim(ymin=13, ymax=26)# 設置 x 軸的刻度位置和刻度標簽
# rotation:刻度標簽旋轉角度(30度)
# color:刻度標簽顏色(藍色系)
# fontsize:字體大小
# ticks:指定刻度的位置(字符串日期)
# labels:對應每個刻度位置的顯示標簽(中文格式)
plt.xticks(rotation=30,color='#09f',fontsize=10,ticks=['2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12', '2025-07-13','2025-07-14', '2025-07-15', '2025-07-16', '2025-07-17', '2025-07-18','2025-07-19', '2025-07-20', '2025-07-21', '2025-07-22', '2025-07-23','2025-07-24', '2025-07-25'],labels=['9日', '10日', '11日', '12日', '13日', '14日', '15日', '16日','17日', '18日', '19日', '20日', '21日', '22日', '23日', '24日', '25日'])# 設置 y 軸的刻度位置和刻度標簽
# rotation:標簽旋轉角度
# color:標簽顏色
# fontsize:字體大小
# ticks:刻度位置
# labels:顯示的標簽(添加了溫度單位 ℃)
plt.yticks(rotation=30,color='#09f',fontsize=10,ticks=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],labels=['13℃', '14℃', '15℃', '16℃', '17℃', '18℃', '19℃', '20℃','21℃', '22℃', '23℃', '24℃', '25℃', '26℃'])# 設置圖表標題
plt.title(label='2025年7月8日至2025年7月25日的氣溫變化', # 標題內容fontdict={'fontsize': 14, 'color': '#09f'}, # 字體樣式:大小14,顏色為藍色(#09f)loc='center', # 標題對齊方式:居中pad=10, # 標題與圖表頂部的距離(以像素為單位)fontweight='bold', # 字體加粗(此參數可被 fontdict 覆蓋)color='red', # 標題文字顏色(若設置,會覆蓋 fontdict 中的顏色)backgroundcolor='lightblue' # 設置標題背景顏色為淺藍色
)# 設置圖表網格線
plt.grid(visible=True, # 是否顯示網格線,設置為 True 表示顯示網格線which='both', # 應用于哪種刻度線('major' 主刻度,'minor' 次刻度,'both' 兩者都應用)axis='both', # 在哪個軸上顯示網格線('x' x軸,'y' y軸,'both' 兩個軸都顯示)linestyle='--', # 網格線的樣式,這里是虛線color='lightblue', # 網格線的顏色,這里設置為淺藍色alpha=0.5, # 網格線的透明度,范圍是0到1,數值越低越透明linewidth=1, # 網格線的寬度dashes=(5, 5) # 虛線的樣式,元組中的第一個數字表示實線部分長度,第二個數字表示間隔長度
)# 繪制一條水平直線,表示“最高氣溫”的平均值
plt.axhline(y=df['最高氣溫'].mean(), # 水平線的 y 值,即最高氣溫的平均值color='red', # 線條顏色為紅色xmin=0.11, # 線條起始位置(x軸左側比例),0表示最左,1表示最右xmax=0.95, # 線條結束位置(x軸右側比例)linestyle='--', # 線條樣式為虛線linewidth=1, # 線條寬度label='平均最高氣溫' # 為該線條添加圖例標簽,后續調用 plt.legend() 時會顯示
)# 繪制另一條水平直線,表示“最低氣溫”的平均值
plt.axhline(y=df['最低氣溫'].mean(), # 水平線的 y 值,即最低氣溫的平均值color='blue', # 線條顏色為藍色xmin=0.11, # 同上,線條起始位置xmax=0.95, # 同上,線條結束位置dashes=(5, 3), # 自定義虛線樣式,5像素實線 + 3像素空白linewidth=1, # 線條寬度label='平均最低氣溫' # 圖例標簽
)# 繪制一條垂直直線,表示某個特定日期(2025年7月21日)
plt.axvline(x=datetime(2025, 7, 21), # 垂直線的 x 值,這里是一個具體的日期(需要提前導入 datetime 模塊)color='#b65', # 使用十六進制顏色碼定義線條顏色(一種橙色調)linestyle='--', # 虛線樣式label='2025-07-21' # 圖例標簽
)# 設置圖例(legend)
plt.legend(labels=['最高氣溫', '最低氣溫', '平均最高氣溫', '平均最低氣溫', '2025-07-21'], # 圖例中顯示的標簽名稱loc='lower left', # 圖例放置的位置:左下角ncol=3, # 圖例分為1列(縱向排列)title='天氣溫度', # 圖例的標題fontsize=10, # 圖例文字的字體大小frameon=True, # 是否顯示圖例邊框edgecolor='blue', # 圖例邊框顏色facecolor='lightblue', # 圖例背景顏色shadow=True, # 是否添加陰影效果fancybox=True # 是否使用圓角邊框(False 為直角)
)# 繪制一個水平方向的跨度(矩形區域),表示特定范圍內的氣溫區間
plt.axhspan(ymin=23, # 矩形區域下邊界的 y 值(此處為溫度)ymax=24.5, # 矩形區域上邊界的 y 值xmin=0.1, # 矩形區域左邊界的 x 軸比例(從x軸起點開始的比例)xmax=0.95, # 矩形區域右邊界的 x 軸比例(到x軸終點的比例)color='lightblue', # 區域填充顏色alpha=0.6, # 透明度,范圍是0到1,數值越小越透明zorder=0, # 圖層順序,值越小越靠后,默認背景層級hatch='///' # 填充模式,這里使用斜線填充
)# 繪制一個垂直方向的跨度(矩形區域),強調特定時間段
plt.axvspan(xmin=datetime(2025, 7, 20), # 矩形區域左邊界的時間點(起始日期時間)xmax=datetime(2025, 7, 22), # 矩形區域右邊界的時間點(結束日期時間)需要導入 datetime 模塊ymin=0.05, # 矩形區域下邊界的 y 軸比例(從y軸起點開始的比例)ymax=0.96, # 矩形區域上邊界的 y 軸比例(到y軸終點的比例)color='lightblue', # 區域填充顏色alpha=0.6, # 透明度zorder=0, # 圖層順序hatch='///' # 填充模式,這里使用斜線填充
)# 獲取數據框中“最高氣溫”列的最小值,并將其賦值給min_temp變量
min_temp = df['最高氣溫'].min()# 篩選出“最高氣溫”等于min_temp的所有行,并獲取對應的第一行的“日期”列值,然后轉換為日期格式
target_date = pd.to_datetime(df[df['最高氣溫'] == min_temp]['日期'].iloc[0])# 在圖表上添加注解,指示最高氣溫的最小值及其對應的日期
plt.annotate(text='最高氣溫最小值', # 注解文本內容xy=(target_date, min_temp), # 注解箭頭指向的位置(x,y)xytext=(target_date, 19.5), # 注解文本位置(x,y)arrowprops=dict(arrowstyle='->', color='blue', alpha=0.8), # 箭頭屬性fontsize=10, # 文本大小color='blue', # 文本顏色alpha=0.8, # 文本透明度ha='center', # 水平對齊方式va='center' # 垂直對齊方式
)# 計算“最高氣溫”的平均值并四舍五入保留一位小數
max_temp_avg = df['最高氣溫'].mean().round(1)# 在指定位置添加文本,顯示最高氣溫的平均值
plt.text(x=datetime(2025, 7, 22), # 文本x坐標y=max_temp_avg, # 文本y坐標s=f'avg:{max_temp_avg}°C', # 文本內容fontsize=10, # 文本大小color='red', # 文本顏色# rotation=45, # 可選:文本旋轉角度,默認不旋轉alpha=0.8, # 文本透明度ha='left', # 水平對齊方式va='bottom' # 垂直對齊方式
)# 將數據框中的“日期”列轉換為datetime類型列表,方便后續繪圖使用
x_temp = pd.to_datetime(df['日期']).tolist()# 獲取“最高氣溫”列的值,并加上溫度單位°C形成新列表
y_temp = df['最高氣溫'].tolist()
y_temp_with_unit = [f"{temp}°C" for temp in y_temp]
for i in range(len(y_temp_with_unit)):# 對每個最高氣溫值添加標注,顯示其具體數值和單位plt.text(x=x_temp[i], # 文本x坐標y=y_temp[i], # 文本y坐標s=y_temp_with_unit[i], # 文本內容fontsize=10, # 文本大小color='#000', # 文本顏色rotation=30, # 文本旋轉角度ha='left', # 水平對齊方式va='bottom' # 垂直對齊方式)# 同樣處理最低氣溫的數據,并在圖表上標注
y_temp = df['最低氣溫'].tolist()
y_temp_with_unit = [f"{temp}°C" for temp in y_temp]
for i in range(len(y_temp_with_unit)):plt.text(x=x_temp[i], # 文本x坐標y=y_temp[i], # 文本y坐標s=y_temp_with_unit[i], # 文本內容fontsize=10, # 文本大小color='#000', # 文本顏色rotation=30, # 文本旋轉角度ha='left', # 水平對齊方式va='bottom' # 垂直對齊方式)# 顯示圖形
plt.show()
繪制的圖形如下圖所示:
七、表格
1. 表格
在 Matplotlib 中,可以使用 plt.table()
或 Axes.table()
方法在圖表中添加一個數據表格。該功能常用于將圖表與原始數據結合展示,增強信息表達。
參數名 | 類型 | 描述 | 示例值 |
---|---|---|---|
cellText | 2D list 或 2D 數組 | 表格主體數據(每個單元格的文本),形狀為 (n_rows, n_cols) | [['A', 'B'], ['1', '2']] |
cellColours | 2D list of colors | 每個單元格的背景顏色,形狀與 cellText 相同 | [['red', 'green'], ['yellow', 'blue']] |
cellLoc | str(可選) | 單元格文本的對齊方式:'left' , 'center' , 'right' | 'center' |
colWidths | list of floats(可選) | 每列的相對寬度(比例) | [0.2, 0.2, 0.2] |
rowLabels | list(長度 = n_rows) | 每行左側的標簽 | ['Row1', 'Row2'] |
rowColours | list of colors | 每行標簽的背景色 | ['lightgray', 'white'] |
rowLoc | str(可選) | 行標簽的文本對齊方式 | 'right' |
colLabels | list(長度 = n_cols) | 每列頂部的列名 | ['ColA', 'ColB'] |
colColours | list of colors | 每列標題的背景顏色 | ['lightblue'] * 3 |
colLoc | str(可選) | 列標簽的文本對齊方式 | 'center' |
loc | str 或 4-tuple | 表格在圖表中的位置(如 'top' , 'bottom' , 'center' )或自定義位置 | 'bottom' , (0.1, 0.1, 0.8, 0.5) |
bbox | [left, bottom, width, height] | 以坐標形式指定表格位置和大小(歸一化坐標 0~1) | [0.1, 0.1, 0.8, 0.5] |
edges | str | 控制單元格邊框顯示:'closed' :全部邊框'open' :無邊框'horizontal' / 'vertical' 'B' , 'T' , 'L' , 'R' :僅顯示某邊 | 'closed' |
**kwargs | 其他屬性 | 如 fontsize , alpha , zorder 等 | fontsize=10, alpha=0.9 |
2. 示例:繪制國內生產總值柱形圖
數據如下圖所示,需要根據這個數據繪制國內生產總值柱形圖,并顯示數據。
實現代碼如下圖所示:
# 導入 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)# 將 DataFrame 中的數據部分(所有行和列)提取為 NumPy 數組,作為表格的單元格內容
table_data = df.values# 獲取 DataFrame 的列名,作為表格的列標題
col_labels = df.columns# 使用 matplotlib 的 plt.table() 在圖表中繪制一個表格
table = plt.table(cellText=table_data, # 表格每個單元格要顯示的文本數據(二維數組)cellLoc='center', # 單元格內文字的對齊方式,'center' 表示居中colWidths=[0.3, 0.3], # 每一列的寬度(相對寬度),這里兩列各占 0.3colLabels=col_labels, # 列標題(表頭),從 df.columns 獲取colColours=['lightblue', 'lightblue'], # 列標題背景顏色,這里兩列都設為淺藍色colLoc='center', # 列標題文字的對齊方式,居中顯示loc='lower left', # 表格在圖表中的位置,'lower left' 表示左下角edges='BT', # 控制單元格邊框的顯示方式:# 'B' = 底部邊框(Bottom)# 'T' = 頂部邊框(Top)# 'L' = 左側邊框(Left)# 'R' = 右側邊框(Right)# 這里只顯示上下邊框,左右無邊框zorder=1 # 圖層順序,值越大越在上層。設為1表示表格顯示在數據圖層之上
)# 顯示繪制完成的圖表
plt.show()
繪制的圖形如下圖所示:
八、數據及代碼下載地址
下載地址:https://download.csdn.net/download/zcs2312852665/91529326