Python繪制各類折線圖的完整指南
引言
折線圖是數(shù)據(jù)可視化中最常用的圖表類型之一,適用于展示數(shù)據(jù)隨時(shí)間或有序類別變化的趨勢。無論是分析銷售額波動(dòng)、溫度變化,還是對比多組數(shù)據(jù)的趨勢差異,折線圖都能直觀呈現(xiàn)數(shù)據(jù)的變化規(guī)律。本文將詳細(xì)介紹如何用 Python 的 Matplotlib、Seaborn 和 Plotly 庫繪制各類折線圖,從基礎(chǔ)到進(jìn)階,覆蓋常見場景及定制技巧。
一、準(zhǔn)備工作:環(huán)境與工具
在開始繪圖前,需確保安裝必要的庫,并解決中文顯示問題(避免標(biāo)題 / 標(biāo)簽亂碼)。
1. 安裝依賴庫
常用的折線圖繪制庫包括:
- Matplotlib:Python 最基礎(chǔ)的繪圖庫,功能全面,可高度定制;
- Seaborn:基于 Matplotlib 的高級封裝,風(fēng)格更美觀,適合統(tǒng)計(jì)可視化;
- Plotly:交互式繪圖庫,支持動(dòng)態(tài)交互(懸停、縮放等)。
安裝命令:
pip install matplotlib seaborn plotly pandas numpy
2. 全局設(shè)置(解決中文顯示問題)
Matplotlib 默認(rèn)不支持中文,需提前配置字體:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd # 設(shè)置中文顯示 plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"] # 支持中文 plt.rcParams["axes.unicode_minus"] = False # 解決負(fù)號顯示問題 sns.set(font_scale=1.2) # Seaborn字體縮放
二、基礎(chǔ)折線圖:單條與多條數(shù)據(jù)
1. 單條折線圖
適用于展示一組數(shù)據(jù)的變化趨勢(如某產(chǎn)品月度銷量)。
示例代碼:
# 生成數(shù)據(jù):x為月份,y為銷量
x = np.arange(1, 13) # 1-12月
y = np.random.randint(50, 150, size=12) # 隨機(jī)生成50-150的銷量
# 創(chuàng)建畫布
plt.figure(figsize=(10, 6)) # 畫布大小(寬, 高)
# 繪制折線圖
plt.plot(x, y, # x軸、y軸數(shù)據(jù)
color='skyblue', # 線條顏色
marker='o', # 數(shù)據(jù)點(diǎn)標(biāo)記(圓形)
linestyle='-', # 線條樣式(實(shí)線)
linewidth=2, # 線條寬度
markersize=6) # 標(biāo)記大小
# 添加標(biāo)題和標(biāo)簽
plt.title('2023年某產(chǎn)品月度銷量趨勢', fontsize=15)
plt.xlabel('月份', fontsize=12)
plt.ylabel('銷量(件)', fontsize=12)
# 設(shè)置x軸刻度(1-12月)
plt.xticks(x)
# 添加網(wǎng)格線(輔助閱讀)
plt.grid(alpha=0.3) # alpha控制透明度
# 顯示圖表
plt.show()關(guān)鍵技巧:通過label參數(shù)定義每條線的名稱,用plt.legend()顯示圖例;用不同顏色、標(biāo)記區(qū)分多條線,提升可讀性。
三、進(jìn)階折線圖:應(yīng)對復(fù)雜場景
1. 帶誤差線的折線圖
當(dāng)數(shù)據(jù)存在波動(dòng)范圍(如實(shí)驗(yàn)重復(fù)的標(biāo)準(zhǔn)差)時(shí),誤差線可直觀展示數(shù)據(jù)的可靠性。
示例代碼:
# 生成數(shù)據(jù)(模擬實(shí)驗(yàn)數(shù)據(jù))
x = np.arange(1, 11) # 實(shí)驗(yàn)次數(shù)
y = np.random.normal(50, 10, 10) # 均值50,標(biāo)準(zhǔn)差10的隨機(jī)數(shù)據(jù)
error = np.random.uniform(2, 5, 10) # 誤差范圍(2-5)
plt.figure(figsize=(10, 6))
# 繪制帶誤差線的折線圖
plt.errorbar(x, y,
yerr=error, # y方向誤差
fmt='-o', # 線條樣式(-實(shí)線+o標(biāo)記)
ecolor='gray', # 誤差線顏色
elinewidth=1, # 誤差線寬度
capsize=3) # 誤差線末端橫線長度
plt.title('實(shí)驗(yàn)數(shù)據(jù)趨勢與誤差范圍', fontsize=15)
plt.xlabel('實(shí)驗(yàn)次數(shù)', fontsize=12)
plt.ylabel('測量值', fontsize=12)
plt.grid(alpha=0.3)
plt.show()效果:折線中每個(gè)數(shù)據(jù)點(diǎn)都帶有上下誤差線,清晰展示數(shù)據(jù)的波動(dòng)范圍。
2. 時(shí)間序列折線圖
時(shí)間序列數(shù)據(jù)(如每日氣溫、每周銷售額)的 x 軸為日期,需特殊處理日期格式。
示例代碼:
import pandas as pd
# 生成時(shí)間序列數(shù)據(jù)(2023年1-3月,共90天)
dates = pd.date_range(start='2023-01-01', end='2023-03-31', freq='D')
values = np.random.randint(10, 30, size=len(dates)) # 模擬每日溫度(10-30℃)
plt.figure(figsize=(14, 6))
# 繪制時(shí)間序列折線圖
plt.plot(dates, values, color='orange', linewidth=1.5)
# 格式化x軸日期(避免重疊)
plt.gcf().autofmt_xdate() # 自動(dòng)旋轉(zhuǎn)日期標(biāo)簽
plt.xlabel('日期', fontsize=12)
plt.ylabel('溫度(℃)', fontsize=12)
plt.title('2023年1-3月每日溫度趨勢', fontsize=15)
plt.grid(alpha=0.3)
plt.show()關(guān)鍵技巧:用pandas.date_range生成日期序列;通過plt.gcf().autofmt_xdate()自動(dòng)旋轉(zhuǎn) x 軸日期標(biāo)簽,避免文字重疊。
3. 雙 Y 軸折線圖
當(dāng)兩組數(shù)據(jù)量級差異大(如 “銷售額” 和 “訂單量”)時(shí),雙 Y 軸可避免其中一組數(shù)據(jù)趨勢被壓縮。
示例代碼:
# 生成數(shù)據(jù)(量級差異大的兩組數(shù)據(jù))
x = np.arange(1, 13) # 月份
y1 = np.random.randint(1000, 5000, 12) # 銷售額(千級)
y2 = np.random.randint(20, 80, 12) # 訂單量(十級)
# 創(chuàng)建畫布和第一個(gè)Y軸
fig, ax1 = plt.subplots(figsize=(12, 6))
# 繪制第一組數(shù)據(jù)(銷售額)
ax1.plot(x, y1, color='blue', label='銷售額')
ax1.set_xlabel('月份', fontsize=12)
ax1.set_ylabel('銷售額(元)', color='blue', fontsize=12)
ax1.tick_params(axis='y', labelcolor='blue') # Y軸標(biāo)簽顏色
# 創(chuàng)建第二個(gè)Y軸(共享X軸)
ax2 = ax1.twinx()
ax2.plot(x, y2, color='red', label='訂單量')
ax2.set_ylabel('訂單量(單)', color='red', fontsize=12)
ax2.tick_params(axis='y', labelcolor='red')
# 合并圖例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
plt.title('月度銷售額與訂單量趨勢', fontsize=15)
plt.grid(alpha=0.3)
plt.show()效果:左側(cè) Y 軸展示銷售額(千級),右側(cè) Y 軸展示訂單量(十級),兩組數(shù)據(jù)趨勢均清晰可見。
4. 填充區(qū)域折線圖
在折線下方填充顏色,可增強(qiáng)數(shù)據(jù)的視覺聚焦效果(如突出累積趨勢)。
示例代碼:
# 生成數(shù)據(jù)(累積增長趨勢)
x = np.arange(1, 11)
y = np.cumsum(np.random.randint(5, 15, 10)) # 累積求和(模擬用戶增長)
plt.figure(figsize=(10, 6))
# 繪制折線并填充下方區(qū)域
plt.plot(x, y, color='purple', linewidth=2)
plt.fill_between(x, y, # x范圍、y上限(折線)、y下限(0)
color='purple',
alpha=0.2) # 透明度(0-1)
plt.title('產(chǎn)品用戶累積增長趨勢', fontsize=15)
plt.xlabel('上線月份', fontsize=12)
plt.ylabel('累積用戶數(shù)', fontsize=12)
plt.grid(alpha=0.3)
plt.show()效果:折線下方被半透明紫色填充,突出數(shù)據(jù)的累積增長趨勢。
四、交互式折線圖(Plotly)
靜態(tài)折線圖無法交互,而 Plotly 可生成支持懸停查看數(shù)據(jù)、縮放、平移的動(dòng)態(tài)圖表,適合網(wǎng)頁展示。
示例代碼:
import plotly.express as px
# 生成數(shù)據(jù)(多組產(chǎn)品銷量)
df = pd.DataFrame({
'月份': np.arange(1, 13),
'產(chǎn)品A': np.random.randint(50, 100, 12),
'產(chǎn)品B': np.random.randint(80, 150, 12),
'產(chǎn)品C': np.random.randint(30, 80, 12)
})
# 轉(zhuǎn)換為長格式(適合Plotly)
df_long = df.melt('月份', var_name='產(chǎn)品', value_name='銷量')
# 繪制交互式折線圖
fig = px.line(df_long,
x='月份',
y='銷量',
color='產(chǎn)品', # 按產(chǎn)品區(qū)分線條
title='2023年三大產(chǎn)品月度銷量趨勢(交互式)',
markers=True) # 顯示數(shù)據(jù)點(diǎn)標(biāo)記
# 顯示圖表(自動(dòng)打開瀏覽器/IDE內(nèi)置窗口)
fig.show()交互功能:
- 懸停在數(shù)據(jù)點(diǎn)上可查看具體數(shù)值(月份、產(chǎn)品、銷量);
- 點(diǎn)擊圖例可隱藏 / 顯示對應(yīng)產(chǎn)品的折線;
- 支持縮放(鼠標(biāo)滾輪)、平移(拖拽)、下載圖片。
五、總結(jié)
折線圖是展示趨勢的核心工具,Python 的 Matplotlib、Seaborn 和 Plotly 庫可滿足不同需求:
- 基礎(chǔ)靜態(tài)圖:用 Matplotlib,靈活定制樣式;
- 統(tǒng)計(jì)風(fēng)格圖:用 Seaborn,默認(rèn)風(fēng)格更美觀;
- 交互式圖表:用 Plotly,適合動(dòng)態(tài)探索數(shù)據(jù)。
實(shí)際應(yīng)用中,需根據(jù)數(shù)據(jù)特點(diǎn)選擇合適的折線圖類型:對比多組數(shù)據(jù)用多條折線,展示波動(dòng)用誤差線,處理時(shí)間數(shù)據(jù)用時(shí)間序列圖,量級差異大用雙 Y 軸。通過合理定制樣式(顏色、標(biāo)記、標(biāo)簽),可讓折線圖更直觀地傳遞數(shù)據(jù)信息。
以上就是Python繪制各類折線圖的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Python繪制各類折線圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Tensorflow實(shí)現(xiàn)將標(biāo)簽變?yōu)閛ne-hot形式
這篇文章主要介紹了Tensorflow實(shí)現(xiàn)將標(biāo)簽變?yōu)閛ne-hot形式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python用pyinstaller封裝exe雙擊后瘋狂閃退解決辦法
本文主要介紹了python用pyinstaller封裝exe雙擊后瘋狂閃退解決辦法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
django-crontab實(shí)現(xiàn)服務(wù)端的定時(shí)任務(wù)的示例代碼
這篇文章主要介紹了django-crontab實(shí)現(xiàn)服務(wù)端的定時(shí)任務(wù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Python中實(shí)現(xiàn)3D模型動(dòng)態(tài)加載的4種方法
本文討論了Python中實(shí)現(xiàn)3D模型動(dòng)態(tài)加載的方法,包括PyOpenGL、Panda3D和ModernGL等,詳細(xì)介紹了基于PyOpenGL的渲染管線和模型加載;利用VPython的場景構(gòu)建和對象管理;基于ModernGL的高效GPU加速方案;四種方法綜合對比與未來優(yōu)化方向等場景,需要的朋友可以參考下2026-04-04
基于Python實(shí)現(xiàn)多圖繪制系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一個(gè)簡單的多圖繪制系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02

