Python 繪制各類折線圖全指南:從基礎到進階

折線圖是數據可視化中最常用的圖表類型之一,適用于展示數據隨時間或有序類別變化的趨勢。無論是分析銷售額波動、溫度變化,還是對比多組數據的趨勢差異,折線圖都能直觀呈現數據的變化規律。本文將詳細介紹如何用 Python 的 Matplotlib、Seaborn 和 Plotly 庫繪制各類折線圖,從基礎到進階,覆蓋常見場景及定制技巧。

一、準備工作:環境與工具

在開始繪圖前,需確保安裝必要的庫,并解決中文顯示問題(避免標題 / 標簽亂碼)。

1. 安裝依賴庫

常用的折線圖繪制庫包括:

  • Matplotlib:Python 最基礎的繪圖庫,功能全面,可高度定制;
  • Seaborn:基于 Matplotlib 的高級封裝,風格更美觀,適合統計可視化;
  • Plotly:交互式繪圖庫,支持動態交互(懸停、縮放等)。

?安裝命令:

pip install matplotlib seaborn plotly pandas numpy

2. 全局設置(解決中文顯示問題)

Matplotlib 默認不支持中文,需提前配置字體:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd# 設置中文顯示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]  # 支持中文
plt.rcParams["axes.unicode_minus"] = False  # 解決負號顯示問題
sns.set(font_scale=1.2)  # Seaborn字體縮放

二、基礎折線圖:單條與多條數據

1. 單條折線圖

適用于展示一組數據的變化趨勢(如某產品月度銷量)。

示例代碼

# 生成數據:x為月份,y為銷量
x = np.arange(1, 13)  # 1-12月
y = np.random.randint(50, 150, size=12)  # 隨機生成50-150的銷量# 創建畫布
plt.figure(figsize=(10, 6))  # 畫布大小(寬, 高)# 繪制折線圖
plt.plot(x, y,  # x軸、y軸數據color='skyblue',  # 線條顏色marker='o',  # 數據點標記(圓形)linestyle='-',  # 線條樣式(實線)linewidth=2,  # 線條寬度markersize=6)  # 標記大小# 添加標題和標簽
plt.title('2023年某產品月度銷量趨勢', fontsize=15)
plt.xlabel('月份', fontsize=12)
plt.ylabel('銷量(件)', fontsize=12)# 設置x軸刻度(1-12月)
plt.xticks(x)# 添加網格線(輔助閱讀)
plt.grid(alpha=0.3)  # alpha控制透明度# 顯示圖表
plt.show()

關鍵技巧:通過label參數定義每條線的名稱,用plt.legend()顯示圖例;用不同顏色、標記區分多條線,提升可讀性。

三、進階折線圖:應對復雜場景

1. 帶誤差線的折線圖

當數據存在波動范圍(如實驗重復的標準差)時,誤差線可直觀展示數據的可靠性。

示例代碼

# 生成數據(模擬實驗數據)
x = np.arange(1, 11)  # 實驗次數
y = np.random.normal(50, 10, 10)  # 均值50,標準差10的隨機數據
error = np.random.uniform(2, 5, 10)  # 誤差范圍(2-5)plt.figure(figsize=(10, 6))# 繪制帶誤差線的折線圖
plt.errorbar(x, y, yerr=error,  # y方向誤差fmt='-o',  # 線條樣式(-實線+o標記)ecolor='gray',  # 誤差線顏色elinewidth=1,  # 誤差線寬度capsize=3)  # 誤差線末端橫線長度plt.title('實驗數據趨勢與誤差范圍', fontsize=15)
plt.xlabel('實驗次數', fontsize=12)
plt.ylabel('測量值', fontsize=12)
plt.grid(alpha=0.3)
plt.show()

效果:折線中每個數據點都帶有上下誤差線,清晰展示數據的波動范圍。

2. 時間序列折線圖

時間序列數據(如每日氣溫、每周銷售額)的 x 軸為日期,需特殊處理日期格式。

示例代碼

import pandas as pd# 生成時間序列數據(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))# 繪制時間序列折線圖
plt.plot(dates, values, color='orange', linewidth=1.5)# 格式化x軸日期(避免重疊)
plt.gcf().autofmt_xdate()  # 自動旋轉日期標簽
plt.xlabel('日期', fontsize=12)
plt.ylabel('溫度(℃)', fontsize=12)
plt.title('2023年1-3月每日溫度趨勢', fontsize=15)
plt.grid(alpha=0.3)
plt.show()

關鍵技巧:用pandas.date_range生成日期序列;通過plt.gcf().autofmt_xdate()自動旋轉 x 軸日期標簽,避免文字重疊。

3. 雙 Y 軸折線圖

當兩組數據量級差異大(如 “銷售額” 和 “訂單量”)時,雙 Y 軸可避免其中一組數據趨勢被壓縮。

示例代碼

# 生成數據(量級差異大的兩組數據)
x = np.arange(1, 13)  # 月份
y1 = np.random.randint(1000, 5000, 12)  # 銷售額(千級)
y2 = np.random.randint(20, 80, 12)      # 訂單量(十級)# 創建畫布和第一個Y軸
fig, ax1 = plt.subplots(figsize=(12, 6))# 繪制第一組數據(銷售額)
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軸標簽顏色# 創建第二個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()

效果:左側 Y 軸展示銷售額(千級),右側 Y 軸展示訂單量(十級),兩組數據趨勢均清晰可見。

4. 填充區域折線圖

在折線下方填充顏色,可增強數據的視覺聚焦效果(如突出累積趨勢)。

示例代碼

# 生成數據(累積增長趨勢)
x = np.arange(1, 11)
y = np.cumsum(np.random.randint(5, 15, 10))  # 累積求和(模擬用戶增長)plt.figure(figsize=(10, 6))# 繪制折線并填充下方區域
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('產品用戶累積增長趨勢', fontsize=15)
plt.xlabel('上線月份', fontsize=12)
plt.ylabel('累積用戶數', fontsize=12)
plt.grid(alpha=0.3)
plt.show()

效果:折線下方被半透明紫色填充,突出數據的累積增長趨勢。

四、交互式折線圖(Plotly)

靜態折線圖無法交互,而 Plotly 可生成支持懸停查看數據、縮放、平移的動態圖表,適合網頁展示。

示例代碼

import plotly.express as px# 生成數據(多組產品銷量)
df = pd.DataFrame({'月份': np.arange(1, 13),'產品A': np.random.randint(50, 100, 12),'產品B': np.random.randint(80, 150, 12),'產品C': np.random.randint(30, 80, 12)
})# 轉換為長格式(適合Plotly)
df_long = df.melt('月份', var_name='產品', value_name='銷量')# 繪制交互式折線圖
fig = px.line(df_long, x='月份', y='銷量', color='產品',  # 按產品區分線條title='2023年三大產品月度銷量趨勢(交互式)',markers=True)  # 顯示數據點標記# 顯示圖表(自動打開瀏覽器/IDE內置窗口)
fig.show()

交互功能

  • 懸停在數據點上可查看具體數值(月份、產品、銷量);
  • 點擊圖例可隱藏 / 顯示對應產品的折線;
  • 支持縮放(鼠標滾輪)、平移(拖拽)、下載圖片。

五、總結

折線圖是展示趨勢的核心工具,Python 的 Matplotlib、Seaborn 和 Plotly 庫可滿足不同需求:

  • 基礎靜態圖:用 Matplotlib,靈活定制樣式;
  • 統計風格圖:用 Seaborn,默認風格更美觀;
  • 交互式圖表:用 Plotly,適合動態探索數據。

實際應用中,需根據數據特點選擇合適的折線圖類型:對比多組數據用多條折線,展示波動用誤差線,處理時間數據用時間序列圖,量級差異大用雙 Y 軸。通過合理定制樣式(顏色、標記、標簽),可讓折線圖更直觀地傳遞數據信息。

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

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

相關文章

MySql 運維性能優化

內存相關配置 innodb_buffer_pool_size:這是 InnoDB 存儲引擎最重要的參數,用于緩存數據和索引。建議設置為服務器可用內存的 50%-70%(對于專用數據庫服務器)。 innodb_buffer_pool_size 8G # 根據服務器內存調整innodb_log_buf…

UG 圖形操作-找圓心

【1】點擊分析-測量【2】 選擇點,點對話框【3】選擇圓弧中心【4】 選擇對象

Spring Boot 配置文件解析

一、前言SpringBoot 使用一個全局的配置文件,配置文件名固定的;application.propertiesapplication.yml配置文件的作用:修改SpringBoot自動配置的默認值;SpringBoot在底層都給我們自動配置好;YAML(YAML Ain…

【JS】事件類型(可addEventListener監聽)

文章目錄1. 窗口/視圖相關事件2. 鼠標事件3. 鍵盤事件4. 焦點事件5. 表單事件6. 觸摸事件(移動端)7. 其他重要事件使用示例 // 監聽滾動事件 useEffect(() > {const handleScroll () > {console.log("當前滾動位置:", window.scrollY);…

【3GPP】5G專用詞匯1

〇、在5G通信領域,類似RRU(遠端射頻單元)、UE(用戶終端)、BS(基站)的專業術語非常豐富,涵蓋設備、功能、架構、技術等多個層面。以下是分類整理的常見5G名詞及其說明: 一…

基于 FFT + VMD 預處理的 1DCNN?Informer 雙支路并行、多頭注意力融合分類模型

1? 引言 現代工業設備的運行狀態高度復雜、故障類型日趨多樣,單一特征處理或單一路徑模型常難以兼顧高精度與實時性。本期推出的模型**“FFT+VMD→1DCNN?Informer→多頭注意力”**流水線,將頻域分解與時序建模結合,通過雙支路并行特征提取和注意力融合,在旋轉機械、電力…

ndarray的創建(小白五分鐘從入門到精通)

ndarray的創建用途方法語法示例核心作用輸出示例基礎構造? 從 Python 數據結構創建np.array()np.array([[1, 2], [3, 4]])將列表/元組轉換為 ndarrayarray([[1, 2], [3, 4]])? 復制數組np.copy()np.copy(arr)創建獨立副本(深拷貝)與原數組相同但不共享…

考研數據結構Part1——單鏈表知識點總結

一、前言單鏈表是線性表的鏈式存儲結構,作為數據結構中最基礎也是最重要的線性結構之一,在考研數據結構科目中占有重要地位。本文將總結帶頭結點單鏈表的各項基本操作,包括初始化、插入、刪除、查找等,并附上完整C語言實現代碼&am…

筆試——Day15

文章目錄第一題題目思路代碼第二題題目:思路代碼第三題題目:思路代碼第一題 題目 平方數 思路 判斷?個數開根號之后左右兩個數的平?,哪個最近即可 代碼 第二題 題目: 分組 思路 枚舉所有的結果,找到第一個復合要…

物聯網全流程開發記錄

問題 有數據采集設備,服務器,上位機用戶顯示三部分,采集設備將采集的數據發送至服務器。服務器將數據保存,上位機讀取服務器保存的數據庫顯示。當出現多設備,多用戶時,如何通過多設備對應多用戶&#xff0c…

【LeetCode 熱題 100】46. 全排列——回溯

Problem: 46. 全排列 文章目錄整體思路完整代碼時空復雜度時間復雜度:O(N * N!)空間復雜度:O(N)整體思路 這段代碼旨在解決一個經典的組合數學問題:全排列 (Permutations)。給定一個不含重復數字的數組 nums,它需要找出其所有可能…

AXI接口學習

amba總線的發展axi協議是兩個接口之間的點對點的協議,主要是有5個通道。主機在寫地址(AW)通道上發送地址,并在寫數據(W)通道上將數據傳輸到從機。從機將接收到的數據寫入指定地址空間。從機完成寫操作&…

Validation - Spring Boot項目中參數檢驗的利器

Validation - Spring Boot項目中參數檢驗的利器 什么是Validation Sping Boot官方原文:When it comes to validating user input, Spring Boot provides strong support for this common, yet critical, task straight out of the box.Although Spring Boot support…

云服務器VS虛擬主機:如何抉擇?

開篇引入在當今數字化浪潮中,無論是個人站長想要搭建獨具風格的博客,展示自己的生活感悟與專業見解;還是中小企業期望構建官方網站,拓展線上業務版圖,提升品牌知名度;亦或是大型互聯網企業籌備高并發的電商…

不同相機CMOS噪點對熒光計算的影響

摘要:熒光成像是生物醫學、材料科學等領域的重要研究手段,其成像質量高度依賴傳感器噪聲特性。本文系統分析CMOS傳感器噪聲類型及其對熒光信號計算的影響機制,結合實驗數據探討不同CMOS架構的噪聲表現差異,提出針對性優化策略。研…

docker 常見命令使用記錄

1. swarm 集群 1. 集群創建 # 創建集群管理節點, --advertise-addr 指定節點管理通信地址,--data-path-addr 指定容器通信地址 docker swarm init --advertise-addr 1.14.138.35 --data-path-addr 1.14.138.35# --advertise-addr 指明當前work節點的…

KRaft 角色狀態設計模式:從狀態理解 Raft

這些狀態類是 Raft 協議行為的核心載體。它們包含轉移邏輯 和 節點在特定狀態下的所有行為和數據。QuorumState它是 KRaft 客戶端實現中狀態管理的核心,扮演著“狀態機上下文(Context)”和“狀態轉換協調者”的關鍵角色。QuorumState 是整個 …

Linux的磁盤存儲管理實操——(上)

一、Linux的設備文件分類 Linux的設備文件分類1、在Linux系統中設備文件是用來與外接交互的接口,它將內核中的硬件設備與文件系統關聯起來,讓用戶可以像操作普通文件一樣來操作硬件設備,同時也為開發者提供了方便而強大的應用程序接口。 2、L…

內核bpf的實現原理

bpftrace能幫我們干什么?1、統計 tcp連接的生命時長、2、統計mysql執行一條sql語句的時間3、統計redis執行命令的時間、 4、對文件進行一次讀或者寫的時間。 常用命令: bpftrace -e Begin { printf("hello\n"); } bpftrace -l *enter_accep…

前端npm配置Nexus為基礎倉庫

步驟: 一、Nexus倉庫配置 新增npm倉庫,具體詳解見 Nexus私有倉庫配置,解釋 注:Nexus的版本需要至少3.38以上,不然會出現npm install 時npm的審計功能報錯,導致install失敗。雖然在3.38以后不會報400錯誤&#xff0c…