最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用Matplotlib和Seaborn繪制常用圖表的技巧

 更新時間:2025年12月07日 15:48:46   作者:小莊-Python辦公  
Python作為數(shù)據(jù)科學(xué)領(lǐng)域的明星語言,擁有強大且豐富的可視化庫,其中最著名的莫過于 Matplotlib 和 Seaborn,本篇博客將作為數(shù)據(jù)可視化之旅的起點,手把手帶領(lǐng)完全新手讀者,從零開始學(xué)習(xí)如何使用Matplotlib和Seaborn繪制常用圖表,需要的朋友可以參考下

1. 引言:數(shù)據(jù)可視化的力量

在當(dāng)今數(shù)據(jù)爆炸的時代,我們每天都面臨著海量信息。如何從這些原始數(shù)據(jù)中提取有價值的洞察,并將其清晰、有效地傳達(dá)給他人?答案就是——數(shù)據(jù)可視化。

數(shù)據(jù)可視化是將數(shù)據(jù)以圖形或圖像的形式呈現(xiàn),幫助我們理解數(shù)據(jù)模式、趨勢、異常值和關(guān)系。它不僅僅是美化數(shù)據(jù),更是數(shù)據(jù)分析不可或缺的一環(huán)。一張精心設(shè)計的圖表,往往勝過千言萬語,能讓我們一眼洞察數(shù)據(jù)背后的故事。

Python作為數(shù)據(jù)科學(xué)領(lǐng)域的明星語言,擁有強大且豐富的可視化庫,其中最著名的莫過于 MatplotlibSeaborn

  • Matplotlib 是Python最基礎(chǔ)也是最核心的繪圖庫,它提供了非常靈活的繪圖接口,可以繪制各種靜態(tài)、動態(tài)、交互式的圖表。雖然其默認(rèn)樣式可能略顯樸素,但通過精細(xì)的控制,可以創(chuàng)建出任何你想要的圖表。
  • Seaborn 是基于Matplotlib的高級統(tǒng)計圖表庫,它提供了更美觀的默認(rèn)樣式和更高級的統(tǒng)計圖表類型,特別適合進(jìn)行探索性數(shù)據(jù)分析。Seaborn讓繪制復(fù)雜且具有統(tǒng)計學(xué)意義的圖表變得更加簡單快捷。

本篇博客將作為數(shù)據(jù)可視化之旅的起點,手把手帶領(lǐng)完全新手讀者,從零開始學(xué)習(xí)如何使用Matplotlib和Seaborn繪制常用圖表,并掌握一些基本的圖表定制技巧。

2. 前置知識與環(huán)境準(zhǔn)備

在開始繪圖之前,請確保您的Python環(huán)境中已安裝必要的庫。

2.1. 必備知識

  • Python基礎(chǔ): 對Python語法、數(shù)據(jù)類型(列表、字典)、循環(huán)、函數(shù)等有基本了解。
  • Pandas基礎(chǔ): 對DataFrame數(shù)據(jù)結(jié)構(gòu)有基本認(rèn)識,知道如何創(chuàng)建、選擇和過濾數(shù)據(jù)。

2.2. 安裝所需庫

如果您尚未安裝 pandas, matplotlibseaborn,可以使用 pip 命令進(jìn)行安裝:

pip install pandas matplotlib seaborn

2.3. 推薦開發(fā)環(huán)境

為了獲得最佳的學(xué)習(xí)體驗,我們強烈建議您使用 Jupyter NotebookJupyterLab。它們提供了交互式的代碼執(zhí)行環(huán)境,可以即時看到繪圖結(jié)果,非常適合數(shù)據(jù)探索和可視化。

如果您使用VS Code等IDE,也可以直接運行Python腳本。

3. 分步指南:從基礎(chǔ)到進(jìn)階的圖表繪制

我們將首先從Matplotlib的基礎(chǔ)圖表開始,然后過渡到Seaborn更高級和美觀的圖表。

3.1. 導(dǎo)入必要的庫

在任何繪圖代碼的開頭,通常都需要導(dǎo)入這些庫:

import pandas as pd
import numpy as np # NumPy常用于生成數(shù)值數(shù)據(jù)
import matplotlib.pyplot as plt
import seaborn as sns

# 設(shè)置Matplotlib中文顯示,防止亂碼
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認(rèn)字體
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像時負(fù)號'-'顯示為方塊的問題

小貼士: plt.rcParams 的設(shè)置是為了讓Matplotlib能夠正確顯示中文標(biāo)簽和負(fù)號。如果您是在英文環(huán)境下,可以忽略此設(shè)置。

3.2. 準(zhǔn)備示例數(shù)據(jù)

為了演示,我們先創(chuàng)建一些簡單的數(shù)據(jù)。

# 創(chuàng)建一個簡單的DataFrame
data = {
    '月份': ['一月', '二月', '三月', '四月', '五月', '六月'],
    '銷售額': [150, 200, 180, 220, 250, 230],
    '成本': [100, 120, 110, 130, 140, 135],
    '利潤': [50, 80, 70, 90, 110, 95],
    '產(chǎn)品A銷量': [30, 45, 40, 50, 60, 55],
    '產(chǎn)品B銷量': [20, 30, 25, 35, 40, 38],
    '評分': [75, 80, 85, 70, 90, 88]
}
df = pd.DataFrame(data)
print("示例DataFrame:")
print(df)

# 創(chuàng)建一些用于直方圖和餅圖的額外數(shù)據(jù)
np.random.seed(42) # 為了結(jié)果可復(fù)現(xiàn)
scores = np.random.normal(loc=75, scale=10, size=100) # 模擬100個考試分?jǐn)?shù)
categories = ['電子產(chǎn)品', '服裝', '食品', '家居', '圖書']
sales_by_category = [400, 300, 200, 150, 100]

3.3. Matplotlib基礎(chǔ)繪圖

Matplotlib的繪圖流程通常是:plt.figure() (創(chuàng)建畫布,可選) -> plt.plot()/plt.scatter()/... (繪制圖表) -> plt.title()/plt.xlabel()/... (添加標(biāo)題和標(biāo)簽) -> plt.show() (顯示圖表)。

3.3.1. 折線圖 (Line Plot)

用途: 展現(xiàn)數(shù)據(jù)隨時間或其他連續(xù)變量變化的趨勢。

plt.figure(figsize=(10, 6)) # 設(shè)置圖表大小
plt.plot(df['月份'], df['銷售額'], marker='o', linestyle='-', color='skyblue', label='銷售額')
plt.plot(df['月份'], df['成本'], marker='x', linestyle='--', color='salmon', label='成本')

plt.title('月度銷售額與成本趨勢')
plt.xlabel('月份')
plt.ylabel('金額 (萬元)')
plt.grid(True, linestyle='--', alpha=0.7) # 添加網(wǎng)格線
plt.legend() # 顯示圖例
plt.show()

3.3.2. 散點圖 (Scatter Plot)

用途: 探索兩個數(shù)值變量之間的關(guān)系,判斷是否存在相關(guān)性。

plt.figure(figsize=(8, 6))
plt.scatter(df['銷售額'], df['利潤'], color='purple', alpha=0.7)

plt.title('銷售額與利潤關(guān)系散點圖')
plt.xlabel('銷售額 (萬元)')
plt.ylabel('利潤 (萬元)')
plt.grid(True, linestyle=':', alpha=0.6)
plt.show()

3.3.3. 柱狀圖 (Bar Plot)

用途: 比較不同類別之間的數(shù)據(jù)大小。

plt.figure(figsize=(10, 6))
plt.bar(df['月份'], df['產(chǎn)品A銷量'], color='lightgreen', label='產(chǎn)品A銷量')
plt.bar(df['月份'], df['產(chǎn)品B銷量'], bottom=df['產(chǎn)品A銷量'], color='lightcoral', label='產(chǎn)品B銷量') # 堆疊柱狀圖

plt.title('月度產(chǎn)品銷量對比')
plt.xlabel('月份')
plt.ylabel('銷量 (件)')
plt.legend()
plt.show()

3.3.4. 直方圖 (Histogram)

用途: 顯示數(shù)值數(shù)據(jù)的分布情況,了解數(shù)據(jù)集中在哪個范圍,以及分布的形狀。

plt.figure(figsize=(8, 6))
plt.hist(scores, bins=10, color='teal', edgecolor='black', alpha=0.7) # bins參數(shù)控制分組數(shù)量

plt.title('學(xué)生考試分?jǐn)?shù)分布')
plt.xlabel('分?jǐn)?shù)')
plt.ylabel('人數(shù)')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

3.3.5. 餅圖 (Pie Chart)

用途: 展現(xiàn)各部分在整體中所占的比例。

plt.figure(figsize=(8, 8))
plt.pie(sales_by_category, labels=categories, autopct='%1.1f%%', startangle=90, colors=sns.color_palette('pastel'))
# autopct='%1.1f%%' 顯示百分比
# startangle=90 從90度開始逆時針繪制
# colors=sns.color_palette('pastel') 使用Seaborn的調(diào)色板讓餅圖更美觀

plt.title('各產(chǎn)品類別銷售額占比')
plt.axis('equal') # 保證餅圖是正圓
plt.show()

3.3.6. 圖表定制化總結(jié)

Matplotlib提供了豐富的定制選項:

  • plt.figure(figsize=(width, height)): 創(chuàng)建一個指定大小的畫布。
  • plt.title('標(biāo)題'): 設(shè)置圖表主標(biāo)題。
  • plt.xlabel('X軸標(biāo)簽'), plt.ylabel('Y軸標(biāo)簽'): 設(shè)置坐標(biāo)軸標(biāo)簽。
  • plt.xticks(), plt.yticks(): 設(shè)置坐標(biāo)軸刻度。
  • plt.grid(True): 添加網(wǎng)格線。
  • plt.legend(): 顯示圖例。
  • plt.xlim(), plt.ylim(): 設(shè)置坐標(biāo)軸范圍。
  • color='...', marker='...', linestyle='...', alpha=...: 控制線條顏色、標(biāo)記、樣式和透明度。
  • plt.savefig('my_plot.png'): 保存圖表到文件。

3.4. Seaborn增強繪圖

Seaborn在Matplotlib的基礎(chǔ)上進(jìn)行了封裝,提供了更高級的API和更美觀的默認(rèn)樣式,尤其擅長繪制統(tǒng)計圖表。

為了更好地展示Seaborn的特性,我們加載一個Seaborn自帶的經(jīng)典數(shù)據(jù)集 tips。

# 加載Seaborn自帶數(shù)據(jù)集
tips = sns.load_dataset('tips')
print("\nSeaborn 'tips' 數(shù)據(jù)集:")
print(tips.head())

3.4.1. 關(guān)系圖 (Relational Plots)

Seaborn的 relplot() 可以方便地創(chuàng)建散點圖和折線圖,并支持通過 col, row, hue, size, style 等參數(shù)創(chuàng)建多維度視圖。

  • 散點圖 (scatterplot)
plt.figure(figsize=(10, 6))
sns.scatterplot(x='total_bill', y='tip', hue='time', style='smoker', size='size', data=tips)
plt.title('用餐總金額與小費關(guān)系 (按用餐時間與吸煙者區(qū)分)')
plt.xlabel('用餐總金額 ($)')
plt.ylabel('小費 ($)')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()

3.4.2. 分布圖 (Distribution Plots)

  • 直方圖 (histplot)
plt.figure(figsize=(10, 6))
sns.histplot(data=tips, x='total_bill', kde=True, hue='sex', palette='viridis')
# kde=True 會在直方圖上疊加核密度估計曲線
# hue='sex' 按性別進(jìn)行分組顯示
plt.title('用餐總金額分布 (按性別)')
plt.xlabel('用餐總金額 ($)')
plt.ylabel('計數(shù)')
plt.show()
  • 核密度估計圖 (kdeplot)
plt.figure(figsize=(10, 6))
sns.kdeplot(data=tips, x='total_bill', hue='time', fill=True, palette='coolwarm')
plt.title('用餐總金額核密度估計 (按用餐時間)')
plt.xlabel('用餐總金額 ($)')
plt.ylabel('密度')
plt.show()

3.4.3. 分類圖 (Categorical Plots)

  • 柱狀圖 (barplot)
plt.figure(figsize=(10, 6))
sns.barplot(x='day', y='total_bill', hue='sex', data=tips, palette='deep')
plt.title('每日用餐總金額均值 (按性別)')
plt.xlabel('星期幾')
plt.ylabel('用餐總金額均值 ($)')
plt.show()
  • 計數(shù)圖 (countplot)
plt.figure(figsize=(8, 6))
sns.countplot(x='day', hue='time', data=tips, palette='pastel')
plt.title('每日用餐次數(shù) (按用餐時間)')
plt.xlabel('星期幾')
plt.ylabel('用餐次數(shù)')
plt.show()
  • 箱線圖 (boxplot)

用途: 顯示數(shù)值數(shù)據(jù)的五數(shù)概括(最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)、最大值)和異常值。

plt.figure(figsize=(10, 6))
sns.boxplot(x='day', y='total_bill', hue='smoker', data=tips, palette='muted')
plt.title('每日用餐總金額分布 (按吸煙者)')
plt.xlabel('星期幾')
plt.ylabel('用餐總金額 ($)')
plt.show()
  • 小提琴圖 (violinplot)

用途: 結(jié)合了箱線圖和核密度估計圖的特點,更詳細(xì)地展示數(shù)據(jù)的分布形狀。

plt.figure(figsize=(10, 6))
sns.violinplot(x='day', y='tip', hue='sex', data=tips, palette='viridis', inner='quartile')
# inner='quartile' 顯示四分位數(shù)線
plt.title('每日小費金額分布 (按性別)')
plt.xlabel('星期幾')
plt.ylabel('小費 ($)')
plt.show()

3.4.4. 熱力圖 (Heatmap)

用途: 可視化矩陣數(shù)據(jù),尤其適用于展示相關(guān)性矩陣。

# 計算tips數(shù)據(jù)集中數(shù)值列的相關(guān)性矩陣
correlation_matrix = tips[['total_bill', 'tip', 'size']].corr()

plt.figure(figsize=(8, 7))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f", linewidths=.5)
# annot=True 在熱力圖上顯示數(shù)值
# cmap='coolwarm' 設(shè)置顏色映射
# fmt=".2f" 格式化數(shù)值為兩位小數(shù)
plt.title('用餐數(shù)據(jù)數(shù)值變量相關(guān)性熱力圖')
plt.show()

4. 常見陷阱與注意事項

作為初學(xué)者,在進(jìn)行數(shù)據(jù)可視化時容易犯一些錯誤。了解這些陷阱可以幫助您創(chuàng)建更有效、更準(zhǔn)確的圖表。

  1. 選擇錯誤的圖表類型:
    • 錯誤: 用餅圖展示多個類別之間的趨勢(餅圖只適合展示部分與整體的比例,類別過多或需要看趨勢時應(yīng)避免)。
    • 正確: 趨勢用折線圖,比較用柱狀圖,分布用直方圖/KDE圖,關(guān)系用散點圖。
  2. 圖表信息不完整:
    • 陷阱: 缺少標(biāo)題、X/Y軸標(biāo)簽、單位,或者圖例不清晰。
    • 解決方案: 始終為圖表添加清晰、描述性的標(biāo)題和標(biāo)簽,確保讀者無需額外解釋就能理解圖表內(nèi)容。
  3. 數(shù)據(jù)量過大導(dǎo)致重疊 (Overplotting):
    • 陷阱: 在散點圖中,如果數(shù)據(jù)點過多,它們會相互重疊,導(dǎo)致無法看清 真實分布。
    • 解決方案: 考慮使用透明度 (alpha 參數(shù)),或者使用 hexbin 圖、2D核密度估計圖(sns.kdeplot(..., kind='hist'))等替代方案。
  4. 誤導(dǎo)性可視化:
    • 陷阱: 坐標(biāo)軸沒有從零開始,或者坐標(biāo)軸范圍設(shè)置不當(dāng),可能夸大或縮小數(shù)據(jù)的差異。
    • 解決方案: 除非有充分理由,否則Y軸通常應(yīng)從零開始。謹(jǐn)慎設(shè)置坐標(biāo)軸范圍,確保真實反映數(shù)據(jù)。
  5. 顏色選擇不當(dāng):
    • 陷阱: 使用過多顏色,或者顏色對比度不足,導(dǎo)致圖表難以閱讀,特別是對于色盲用戶。
    • 解決方案: 優(yōu)先使用Seaborn提供的調(diào)色板,它們通常經(jīng)過優(yōu)化。對于分類數(shù)據(jù),選擇區(qū)分度高的顏色;對于連續(xù)數(shù)據(jù),選擇漸變色。

5. 總結(jié)

數(shù)據(jù)可視化是一項實踐性很強的技能。要真正掌握它,需要不斷地練習(xí)和嘗試。從簡單的數(shù)據(jù)集開始,嘗試?yán)L制不同類型的圖表,并不斷調(diào)整參數(shù)和樣式,直到您能自信地用圖表講述數(shù)據(jù)的故事。

記住,好的可視化不僅僅是代碼的堆砌,更是對數(shù)據(jù)洞察的藝術(shù)表達(dá)。祝您在數(shù)據(jù)可視化的旅程中取得豐碩的成果!

以上就是Python使用Matplotlib和Seaborn繪制常用圖表的技巧的詳細(xì)內(nèi)容,更多關(guān)于Python Matplotlib和Seaborn繪制圖表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實現(xiàn)簡單石頭剪刀布小游戲的示例代碼

    Python實現(xiàn)簡單石頭剪刀布小游戲的示例代碼

    石頭剪刀布是一種簡單而又經(jīng)典的游戲,常常用于決定勝負(fù)或者娛樂消遣,本文將使用Python實現(xiàn)一個簡單的石頭剪刀布游戲,需要的可以參考一下
    2023-06-06
  • Python實現(xiàn)掃描指定目錄下的子目錄及文件的方法

    Python實現(xiàn)掃描指定目錄下的子目錄及文件的方法

    這篇文章主要介紹了Python實現(xiàn)掃描指定目錄下的子目錄及文件的方法,需要的朋友可以參考下
    2014-07-07
  • python在ubuntu中的幾種安裝方法(小結(jié))

    python在ubuntu中的幾種安裝方法(小結(jié))

    本篇文章主要介紹了python在ubuntu中的幾種安裝方法(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Python使用Code2flow將代碼轉(zhuǎn)化為流程圖的操作教程

    Python使用Code2flow將代碼轉(zhuǎn)化為流程圖的操作教程

    Code2flow 是一款開源工具,能夠?qū)⒋a自動轉(zhuǎn)換為流程圖,該工具對于代碼審查、調(diào)試和理解大型代碼庫非常有用,在這篇博客中,我們將深入探討 Code2flow 的功能,展示如何將代碼轉(zhuǎn)化為流程圖、常用的配置選項和使用技巧,需要的朋友可以參考下
    2025-06-06
  • Python中@符號的具體使用

    Python中@符號的具體使用

    本文主要介紹了Python中@符號的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Python3實現(xiàn)發(fā)送QQ郵件功能(html)

    Python3實現(xiàn)發(fā)送QQ郵件功能(html)

    這篇文章主要為大家詳細(xì)介紹了Python3實現(xiàn)發(fā)送QQ郵件功能,html格式的qq郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python中優(yōu)化堆積條形圖的實現(xiàn)方法與對比效果

    Python中優(yōu)化堆積條形圖的實現(xiàn)方法與對比效果

    在數(shù)據(jù)可視化中,堆積條形圖 擅長展示 整體與構(gòu)成 的關(guān)系,今天,本文將嘗試探索一下改進(jìn)堆積條形圖的呈現(xiàn)方式,讓復(fù)雜數(shù)據(jù)對比變得一目了然,感興趣的小伙伴可以了解下
    2026-01-01
  • python 利用pandas將arff文件轉(zhuǎn)csv文件的方法

    python 利用pandas將arff文件轉(zhuǎn)csv文件的方法

    今天小編就為大家分享一篇python 利用pandas將arff文件轉(zhuǎn)csv文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python曲線擬合多項式深入詳解

    Python曲線擬合多項式深入詳解

    這篇文章主要給大家介紹了關(guān)于Python使用scipy進(jìn)行曲線擬合的相關(guān)資料,Scipy優(yōu)化和擬合采用的是optimize模塊,該模塊提供了函數(shù)最小值(標(biāo)量或多維)、曲線擬合和尋找等式的根的有用算法,需要的朋友可以參考下
    2022-11-11
  • python通過socket搭建極簡web服務(wù)器的實現(xiàn)代碼

    python通過socket搭建極簡web服務(wù)器的實現(xiàn)代碼

    python的web框架眾多,常見的如django、flask、tornado等,其底層是什么還是有些許的疑問,所以查找相關(guān)資料,實現(xiàn)瀏覽器訪問,并返回相關(guān)信息,本文將給大家介紹python通過socket搭建極簡web服務(wù)器,需要的朋友可以參考下
    2023-10-10

最新評論

繁昌县| 镇江市| 临潭县| 金秀| 冷水江市| 津市市| 本溪| 澜沧| 克什克腾旗| 富裕县| 屏东县| 益阳市| 东莞市| 涟源市| 吉木乃县| 苏尼特右旗| 石泉县| 林西县| 清河县| 临江市| 忻州市| 游戏| 基隆市| 乌什县| 吐鲁番市| 达日县| 集安市| 贺兰县| 恭城| 通江县| 平江县| 深泽县| 绥江县| 莒南县| 伊宁县| 曲阜市| 阿鲁科尔沁旗| 胶南市| 滦南县| 清丰县| 休宁县|