Python繪制各類折線圖的完整指南
引言
折線圖是數(shù)據(jù)可視化中最常用的圖表類型之一,適用于展示數(shù)據(jù)隨時(shí)間或有序類別變化的趨勢(shì)。無(wú)論是分析銷(xiāo)售額波動(dòng)、溫度變化,還是對(duì)比多組數(shù)據(jù)的趨勢(shì)差異,折線圖都能直觀呈現(xiàn)數(shù)據(jù)的變化規(guī)律。本文將詳細(xì)介紹如何用 Python 的 Matplotlib、Seaborn 和 Plotly 庫(kù)繪制各類折線圖,從基礎(chǔ)到進(jìn)階,覆蓋常見(jiàn)場(chǎng)景及定制技巧。
一、準(zhǔn)備工作:環(huán)境與工具
在開(kāi)始繪圖前,需確保安裝必要的庫(kù),并解決中文顯示問(wèn)題(避免標(biāo)題 / 標(biāo)簽亂碼)。
1. 安裝依賴庫(kù)
常用的折線圖繪制庫(kù)包括:
- Matplotlib:Python 最基礎(chǔ)的繪圖庫(kù),功能全面,可高度定制;
- Seaborn:基于 Matplotlib 的高級(jí)封裝,風(fēng)格更美觀,適合統(tǒng)計(jì)可視化;
- Plotly:交互式繪圖庫(kù),支持動(dòng)態(tài)交互(懸停、縮放等)。
安裝命令:
pip install matplotlib seaborn plotly pandas numpy
2. 全局設(shè)置(解決中文顯示問(wèn)題)
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ù)號(hào)顯示問(wèn)題 sns.set(font_scale=1.2) # Seaborn字體縮放
二、基礎(chǔ)折線圖:?jiǎn)螚l與多條數(shù)據(jù)
1. 單條折線圖
適用于展示一組數(shù)據(jù)的變化趨勢(shì)(如某產(chǎn)品月度銷(xiāo)量)。
示例代碼:
# 生成數(shù)據(jù):x為月份,y為銷(xiāo)量
x = np.arange(1, 13) # 1-12月
y = np.random.randint(50, 150, size=12) # 隨機(jī)生成50-150的銷(xiāo)量
# 創(chuàng)建畫(huà)布
plt.figure(figsize=(10, 6)) # 畫(huà)布大小(寬, 高)
# 繪制折線圖
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)品月度銷(xiāo)量趨勢(shì)', fontsize=15)
plt.xlabel('月份', fontsize=12)
plt.ylabel('銷(xiāo)量(件)', fontsize=12)
# 設(shè)置x軸刻度(1-12月)
plt.xticks(x)
# 添加網(wǎng)格線(輔助閱讀)
plt.grid(alpha=0.3) # alpha控制透明度
# 顯示圖表
plt.show()關(guān)鍵技巧:通過(guò)label參數(shù)定義每條線的名稱,用plt.legend()顯示圖例;用不同顏色、標(biāo)記區(qū)分多條線,提升可讀性。
三、進(jìn)階折線圖:應(yīng)對(duì)復(fù)雜場(chǎng)景
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) # 誤差線末端橫線長(zhǎng)度
plt.title('實(shí)驗(yàn)數(shù)據(jù)趨勢(shì)與誤差范圍', fontsize=15)
plt.xlabel('實(shí)驗(yàn)次數(shù)', fontsize=12)
plt.ylabel('測(cè)量值', fontsize=12)
plt.grid(alpha=0.3)
plt.show()效果:折線中每個(gè)數(shù)據(jù)點(diǎn)都帶有上下誤差線,清晰展示數(shù)據(jù)的波動(dòng)范圍。
2. 時(shí)間序列折線圖
時(shí)間序列數(shù)據(jù)(如每日氣溫、每周銷(xiāo)售額)的 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月每日溫度趨勢(shì)', fontsize=15)
plt.grid(alpha=0.3)
plt.show()關(guān)鍵技巧:用pandas.date_range生成日期序列;通過(guò)plt.gcf().autofmt_xdate()自動(dòng)旋轉(zhuǎn) x 軸日期標(biāo)簽,避免文字重疊。
3. 雙 Y 軸折線圖
當(dāng)兩組數(shù)據(jù)量級(jí)差異大(如 “銷(xiāo)售額” 和 “訂單量”)時(shí),雙 Y 軸可避免其中一組數(shù)據(jù)趨勢(shì)被壓縮。
示例代碼:
# 生成數(shù)據(jù)(量級(jí)差異大的兩組數(shù)據(jù))
x = np.arange(1, 13) # 月份
y1 = np.random.randint(1000, 5000, 12) # 銷(xiāo)售額(千級(jí))
y2 = np.random.randint(20, 80, 12) # 訂單量(十級(jí))
# 創(chuàng)建畫(huà)布和第一個(gè)Y軸
fig, ax1 = plt.subplots(figsize=(12, 6))
# 繪制第一組數(shù)據(jù)(銷(xiāo)售額)
ax1.plot(x, y1, color='blue', label='銷(xiāo)售額')
ax1.set_xlabel('月份', fontsize=12)
ax1.set_ylabel('銷(xiāo)售額(元)', 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('月度銷(xiāo)售額與訂單量趨勢(shì)', fontsize=15)
plt.grid(alpha=0.3)
plt.show()效果:左側(cè) Y 軸展示銷(xiāo)售額(千級(jí)),右側(cè) Y 軸展示訂單量(十級(jí)),兩組數(shù)據(jù)趨勢(shì)均清晰可見(jiàn)。
4. 填充區(qū)域折線圖
在折線下方填充顏色,可增強(qiáng)數(shù)據(jù)的視覺(jué)聚焦效果(如突出累積趨勢(shì))。
示例代碼:
# 生成數(shù)據(jù)(累積增長(zhǎng)趨勢(shì))
x = np.arange(1, 11)
y = np.cumsum(np.random.randint(5, 15, 10)) # 累積求和(模擬用戶增長(zhǎng))
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)品用戶累積增長(zhǎng)趨勢(shì)', fontsize=15)
plt.xlabel('上線月份', fontsize=12)
plt.ylabel('累積用戶數(shù)', fontsize=12)
plt.grid(alpha=0.3)
plt.show()效果:折線下方被半透明紫色填充,突出數(shù)據(jù)的累積增長(zhǎng)趨勢(shì)。
四、交互式折線圖(Plotly)
靜態(tài)折線圖無(wú)法交互,而 Plotly 可生成支持懸停查看數(shù)據(jù)、縮放、平移的動(dòng)態(tài)圖表,適合網(wǎng)頁(yè)展示。
示例代碼:
import plotly.express as px
# 生成數(shù)據(jù)(多組產(chǎn)品銷(xiāo)量)
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)換為長(zhǎng)格式(適合Plotly)
df_long = df.melt('月份', var_name='產(chǎn)品', value_name='銷(xiāo)量')
# 繪制交互式折線圖
fig = px.line(df_long,
x='月份',
y='銷(xiāo)量',
color='產(chǎn)品', # 按產(chǎn)品區(qū)分線條
title='2023年三大產(chǎn)品月度銷(xiāo)量趨勢(shì)(交互式)',
markers=True) # 顯示數(shù)據(jù)點(diǎn)標(biāo)記
# 顯示圖表(自動(dòng)打開(kāi)瀏覽器/IDE內(nèi)置窗口)
fig.show()交互功能:
- 懸停在數(shù)據(jù)點(diǎn)上可查看具體數(shù)值(月份、產(chǎn)品、銷(xiāo)量);
- 點(diǎn)擊圖例可隱藏 / 顯示對(duì)應(yīng)產(chǎn)品的折線;
- 支持縮放(鼠標(biāo)滾輪)、平移(拖拽)、下載圖片。
五、總結(jié)
折線圖是展示趨勢(shì)的核心工具,Python 的 Matplotlib、Seaborn 和 Plotly 庫(kù)可滿足不同需求:
- 基礎(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)選擇合適的折線圖類型:對(duì)比多組數(shù)據(jù)用多條折線,展示波動(dòng)用誤差線,處理時(shí)間數(shù)據(jù)用時(shí)間序列圖,量級(jí)差異大用雙 Y 軸。通過(guò)合理定制樣式(顏色、標(biāo)記、標(biāo)簽),可讓折線圖更直觀地傳遞數(shù)據(jù)信息。
以上就是Python繪制各類折線圖的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Python繪制各類折線圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python網(wǎng)絡(luò)爬蟲(chóng)精解之Beautiful Soup的使用說(shuō)明
簡(jiǎn)單來(lái)說(shuō),Beautiful Soup 是 python 的一個(gè)庫(kù),最主要的功能是從網(wǎng)頁(yè)抓取數(shù)據(jù),Beautiful Soup 提供一些簡(jiǎn)單的、python 式的函數(shù)用來(lái)處理導(dǎo)航、搜索、修改分析樹(shù)等功能,需要的朋友可以參考下2021-09-09
使用python進(jìn)行圖像分類的實(shí)現(xiàn)步驟
圖像分類與識(shí)別是計(jì)算機(jī)視覺(jué)中的重要任務(wù),它可以幫助我們自動(dòng)識(shí)別圖像中的對(duì)象、場(chǎng)景或者特征,在本文中,我們將介紹使用python進(jìn)行圖像分類的實(shí)現(xiàn)步驟,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-09-09
python多進(jìn)程實(shí)現(xiàn)數(shù)據(jù)共享的示例代碼
本文介紹了Python中多進(jìn)程實(shí)現(xiàn)數(shù)據(jù)共享的方法,包括使用multiprocessing模塊和manager模塊這兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01
使用 Python 和 OpenCV 實(shí)現(xiàn)攝像頭人臉檢測(cè)并截圖功能
在現(xiàn)代應(yīng)用中,人臉檢測(cè)是一項(xiàng)非常重要的技術(shù),廣泛應(yīng)用于安全監(jiān)控、身份驗(yàn)證等領(lǐng)域,本文詳細(xì)介紹了如何使用 Python 和 OpenCV 庫(kù)實(shí)現(xiàn)攝像頭人臉檢測(cè)并截圖,并通過(guò)具體的代碼示例展示了整個(gè)過(guò)程,感興趣的朋友一起看看吧2024-11-11
全網(wǎng)最細(xì) Python 格式化輸出用法講解(推薦)
這篇文章主要介紹了全網(wǎng)最細(xì) Python 格式化輸出用法講解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Tensorflow矩陣運(yùn)算實(shí)例(矩陣相乘,點(diǎn)乘,行/列累加)
今天小編就為大家分享一篇Tensorflow矩陣運(yùn)算實(shí)例(矩陣相乘,點(diǎn)乘,行/列累加),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02

