零基礎學習 Python 可視化:Matplotlib、Seaborn、Plotly 基礎教學
在這個“數據爆炸”的時代,我們每天都會接觸到大量數據——比如手機里的運動步數、電商平臺的購物記錄、公司的銷售報表。但 raw data(原始數據)本身是枯燥的,就像一堆散落的拼圖碎片,無法直接告訴我們“發生了什么”“為什么發生”。
而數據可視化就是把這些碎片拼成一幅完整的畫。它用圖表、圖形、互動元素代替冰冷的數字,讓數據“說話”。比如:
- 用折線圖看銷量的月度趨勢,一眼就能發現“618”或“雙11”的峰值;
- 用散點圖看身高與體重的關系,能快速識別“肥胖”或“偏瘦”的群體;
- 用熱力圖看用戶在網頁上的點擊分布,能優化產品的界面設計。
Python作為當前最流行的編程語言之一,憑借豐富的可視化庫(Matplotlib、Seaborn、Plotly等)、簡單的語法(比Java、C++容易上手)和強大的生態(與Pandas、Numpy等數據處理庫無縫銜接),成為數據可視化的“首選工具”。
哪怕你是完全沒接觸過編程的新手,只要跟著這篇文章一步步做,也能在1個月內掌握Python可視化的核心技能,用數據講故事。
一、準備工作:搭建你的可視化環境
在開始之前,我們需要先搭建Python的開發環境。對于新手來說,Anaconda是最佳選擇——它自帶了Python解釋器、常用庫(如Matplotlib、Pandas、Seaborn)和開發工具(Jupyter Notebook),省去了手動安裝的麻煩。
1. 安裝Anaconda
- 下載地址:Anaconda官方網站(選擇對應系統的版本,比如Windows、macOS);
- 安裝步驟:雙擊安裝包,一路點擊“Next”(注意勾選“Add Anaconda to PATH”,方便在命令行中使用)。
2. 驗證環境是否安裝成功
打開Anaconda Prompt(Windows)或終端(macOS),輸入以下命令:
python --version # 查看Python版本,應該顯示3.8及以上
conda list matplotlib # 查看Matplotlib是否安裝,顯示版本號即成功
3. 選擇開發工具
推薦使用Jupyter Notebook(Anaconda自帶),它能將代碼、圖表、注釋放在同一個文檔中,非常適合學習和展示。啟動方式:
- 打開Anaconda Navigator,點擊“Jupyter Notebook”;
- 在瀏覽器中會打開Jupyter界面,點擊“New”→“Python 3”,創建一個新的 Notebook。
二、基礎篇:用Matplotlib畫第一個圖表
Matplotlib是Python中最基礎、最常用的可視化庫,被稱為“可視化界的Photoshop”——它能繪制幾乎所有類型的圖表,且高度可定制。
1. 第一個折線圖:展示銷量趨勢
假設我們有一組2024年上半年的銷量數據,想看看每月的增長趨勢。步驟如下:
(1) 導入庫
首先需要導入Matplotlib的pyplot模塊(通常縮寫為plt):
import matplotlib.pyplot as plt
(2) 準備數據
用列表存儲月份和銷量數據:
months = ['1月', '2月', '3月', '4月', '5月', '6月'] # x軸:月份
sales = [120, 150, 180, 200, 220, 250] # y軸:銷量(萬元)
(3) 繪制折線圖
用plt.plot()函數繪制折線圖,參數說明:
- months:x軸數據;
- sales:y軸數據;
- marker='o':在折線上添加圓形標記(方便看每個點的數值);
- color='b':折線顏色為藍色(b=blue);
- label='銷量趨勢':圖例標簽(用于說明圖表內容)。
代碼:
plt.plot(months, sales, marker='o', color='b', label='銷量趨勢')
(4) 添加圖表元素
為了讓圖表更清晰,需要添加x軸標簽、y軸標簽、標題和圖例:
plt.xlabel('月份') # x軸標簽
plt.ylabel('銷量(萬元)') # y軸標簽
plt.title('2024年上半年銷量趨勢') # 圖表標題
plt.legend() # 顯示圖例(對應label參數)
(5) 顯示圖表
最后用plt.show()函數顯示圖表:
plt.show()
(6) 效果展示
運行以上代碼,會彈出一個窗口,顯示一張藍色折線圖:折線上的每個點都有圓形標記,x軸是月份,y軸是銷量,標題清晰,圖例說明“銷量趨勢”。從圖中可以明顯看到,銷量從1月的120萬元穩步增長到6月的250萬元,增長趨勢明顯。
2. 擴展:繪制其他基礎圖表
Matplotlib支持多種圖表類型,以下是幾個常用的例子:
(1) 柱狀圖:比較不同產品的銷量
用plt.bar()函數繪制柱狀圖,適合比較類別數據(如不同產品、不同地區的銷量):
products = ['產品A', '產品B', '產品C', '產品D'] # 產品類別
product_sales = [300, 250, 400, 350] # 各產品銷量
plt.bar(products, product_sales, color=['r', 'g', 'b', 'y']) # 柱狀圖,不同產品用不同顏色
plt.xlabel('產品類別')
plt.ylabel('銷量(萬元)')
plt.title('2024年上半年產品銷量對比')
plt.show()
(2) 散點圖:看身高與體重的相關性
用plt.scatter()函數繪制散點圖,適合展示兩個變量之間的關系(如身高與體重、廣告投入與銷售額):
height = [160, 165, 170, 175, 180] # 身高(cm)
weight = [50, 55, 60, 65, 70] # 體重(kg)
plt.scatter(height, weight, marker='s', color='purple', s=100) # 散點圖,正方形標記,紫色,大小100
plt.xlabel('身高(cm)')
plt.ylabel('體重(kg)')
plt.title('身高與體重的相關性')
plt.show()
(3) 餅圖:展示產品銷量占比
用plt.pie()函數繪制餅圖,適合展示各部分占總體的比例(如產品銷量占比、用戶來源占比):
product_sales = [300, 250, 400, 350] # 各產品銷量
products = ['產品A', '產品B', '產品C', '產品D'] # 產品類別
plt.pie(product_sales, labels=products, autopct='%1.1f%%', startangle=90) # 餅圖,顯示百分比,起始角度90度
plt.title('2024年上半年產品銷量占比')
plt.show()
三、進階篇:用Seaborn讓圖表更“專業”
Matplotlib的優點是靈活,但缺點是默認樣式不夠美觀,而且繪制統計圖表(如直方圖、箱線圖)需要寫較多代碼。這時,Seaborn就派上用場了——它是基于Matplotlib的高級可視化庫,自帶漂亮的默認樣式,且能快速繪制統計圖表。
1. Seaborn的優勢
- 默認樣式美觀:Seaborn的默認顏色搭配和布局比Matplotlib更符合現代審美;
- 代碼更簡潔:繪制統計圖表只需一行代碼,無需手動設置太多參數;
- 支持統計分析:能快速計算數據的分布、相關性等統計指標,并可視化。
2. 安裝Seaborn
如果Anaconda沒自帶Seaborn,可以用以下命令安裝:
conda install seaborn
3. 用Seaborn繪制統計圖表
(1) 直方圖:展示數據分布
用seaborn.histplot()函數繪制直方圖,適合展示連續變量的分布(如身高、體重、銷售額的分布):
import seaborn as sns
import matplotlib.pyplot as plt
# 加載Seaborn自帶的iris數據集(鳶尾花數據,包含花瓣長度、寬度等特征)
iris = sns.load_dataset('iris')
# 繪制花瓣長度的直方圖, bins=20表示將數據分成20個區間
sns.histplot(iris['petal_length'], bins=20, color='green', kde=True) # kde=True表示添加核密度估計曲線
plt.xlabel('花瓣長度(cm)')
plt.ylabel('數量')
plt.title('鳶尾花花瓣長度分布')
plt.show()
(2) 箱線圖:展示數據的離散程度
用seaborn.boxplot()函數繪制箱線圖,適合展示數據的中位數、四分位數、異常值(如不同產品銷量的離散程度):
# 用iris數據集的花瓣長度,按物種分組繪制箱線圖
sns.boxplot(x='species', y='petal_length', data=iris, palette='Set2') # palette='Set2'表示使用Set2顏色 palette
plt.xlabel('物種')
plt.ylabel('花瓣長度(cm)')
plt.title('不同物種鳶尾花花瓣長度分布')
plt.show()
(3) 配對圖:探索多變量關系
用seaborn.pairplot()函數繪制配對圖,適合展示多個變量之間的兩兩關系(如iris數據集中四個特征的相關性):
# 繪制配對圖,按物種分組(hue='species'),不同物種用不同顏色
sns.pairplot(iris, hue='species', palette='husl')
plt.title('鳶尾花特征配對圖')
plt.show()
(4) 效果展示
Seaborn的圖表默認樣式非常漂亮,比如配對圖中,每個子圖展示兩個特征的關系,不同物種用不同顏色標記,能快速發現“ versicolor 物種的花瓣長度比 setosa 長”這樣的規律。
四、高級篇:用Plotly做交互式可視化
前面的Matplotlib和Seaborn繪制的是靜態圖表,無法與用戶互動。而Plotly是一個交互式可視化庫,能繪制可縮放、可 hover、可點擊的圖表,非常適合做網頁展示或報告。
1. Plotly的優勢
- 交互式:鼠標 hover 能看到具體數值,縮放、拖動圖表能查看細節;
- 跨平臺:能導出為HTML文件,在瀏覽器中打開,無需安裝任何軟件;
- 支持復雜圖表:如熱力圖、地圖、3D圖表等。
2. 安裝Plotly
用以下命令安裝Plotly:
conda install plotly
3. 用Plotly繪制交互式圖表
(1) 交互式折線圖:展示各國GDP增長趨勢
用plotly.express.line()函數繪制交互式折線圖,數據用Plotly自帶的gapminder數據集(包含各國的GDP、人口等數據):
import plotly.express as px
# 加載gapminder數據集
gapminder = px.data.gapminder()
# 繪制交互式折線圖:x軸是年份,y軸是GDP per Capita,按國家分組(color='country')
fig = px.line(gapminder, x='year', y='gdpPercap', color='country', title='各國GDP per Capita增長趨勢')
# 顯示圖表(在瀏覽器中打開)
fig.show()
(2) 交互式散點圖:展示GDP與預期壽命的關系
用plotly.express.scatter()函數繪制交互式散點圖,添加大小(表示人口)和顏色(表示 continent):
# 繪制交互式散點圖:x軸是GDP per Capita,y軸是預期壽命,大小表示人口,顏色表示 continent
fig = px.scatter(gapminder, x='gdpPercap', y='lifeExp', size='pop', color='continent', hover_name='country', title='GDP與預期壽命的關系')
# 顯示圖表
fig.show()
(3) 交互式地圖:展示各地區銷量分布
用plotly.express.choropleth()函數繪制交互式地圖,適合展示地理數據(如各地區的銷量、人口):
# 假設我們有一組地區銷量數據(地區是國家名稱,銷量是數值)
region_sales = pd.DataFrame({
'地區': ['China', 'India', 'United States', 'Indonesia', 'Brazil'],
'銷量': [1000, 800, 1200, 600, 700]
})
# 繪制交互式地圖:顏色表示銷量,locationmode='country names'表示地區是國家名稱
fig = px.choropleth(region_sales, locations='地區', locationmode='country names', color='銷量', title='各地區總銷量分布')
# 顯示圖表
fig.show()
(4) 效果展示
運行以上代碼,會在瀏覽器中打開一個交互式圖表。比如交互式散點圖,鼠標 hover 到某個點,會顯示國家名稱、GDP、預期壽命和人口;點擊圖例中的“Asia”,會隱藏亞洲國家的數據;縮放x軸,能查看某段GDP區間的國家分布。
五、實戰篇:用Python可視化分析電商銷售數據
現在,我們將用前面學的三個庫(Matplotlib、Seaborn、Plotly),結合Pandas(數據處理庫),分析一個真實的電商銷售數據集,完成一個完整的可視化項目。
1. 數據準備
我們使用Kaggle上的“E-commerce Sales Dataset”(電商銷售數據集),包含以下字段:
- Order ID:訂單ID;
- Date:訂單日期;
- Product Category:產品類別;
- Region:地區;
- Sales:銷量(美元)。
2. 數據導入與清洗
首先用Pandas導入數據,并處理缺失值和日期格式:
import pandas as pd
# 導入數據(假設數據文件在當前目錄下)
sales_data = pd.read_csv('ecommerce_sales.csv')
# 查看數據前5行
print(sales_data.head())
# 處理缺失值:用均值填充銷量列的缺失值
sales_data['Sales'] = sales_data['Sales'].fillna(sales_data['Sales'].mean())
# 處理日期格式:將Date列轉換為datetime類型
sales_data['Date'] = pd.to_datetime(sales_data['Date'])
# 新增月份列(用于按月份統計)
sales_data['Month'] = sales_data['Date'].dt.to_period('M')
3. 可視化分析
(1) 用Matplotlib畫月度銷量趨勢圖
import matplotlib.pyplot as plt
# 按月份統計總銷量
monthly_sales = sales_data.groupby('Month')['Sales'].sum().reset_index()
# 繪制折線圖
plt.figure(figsize=(12, 6)) # 設置圖表大小
plt.plot(monthly_sales['Month'].astype(str), monthly_sales['Sales'], marker='o', color='orange', linewidth=2)
plt.xlabel('月份')
plt.ylabel('總銷量(美元)')
plt.title('2024年電商月度銷量趨勢')
plt.xticks(rotation=45) # 旋轉x軸標簽,避免重疊
plt.grid(True) # 顯示網格線
plt.show()
(2) 用Seaborn畫產品類別銷量箱線圖
import seaborn as sns
# 繪制箱線圖:按產品類別分組,展示銷量的離散程度
plt.figure(figsize=(12, 6))
sns.boxplot(x='Product Category', y='Sales', data=sales_data, palette='viridis')
plt.xlabel('產品類別')
plt.ylabel('銷量(美元)')
plt.title('不同產品類別銷量分布')
plt.xticks(rotation=45)
plt.show()
(3) 用Plotly畫交互式地區銷量地圖
import plotly.express as px
# 按地區統計總銷量
region_sales = sales_data.groupby('Region')['Sales'].sum().reset_index()
# 繪制交互式地圖:顏色表示銷量,locationmode='country names'表示地區是國家名稱
fig = px.choropleth(region_sales, locations='Region', locationmode='country names', color='Sales', title='2024年電商地區銷量分布')
fig.show()
本文通過基礎案例帶大家熟悉Matplotlib、Seaborn、Plotly可視化的基礎操作,大家如果想進一步學習可以多查閱官方文檔及案例。