用 Python 制作炫酷的數據可視化:從散點圖到交互式圖表
作者:用戶007
Python有多個可視化庫,從基礎的Matplotlib到高級的Plotly,本文將手把手教你用這些工具創建專業的數據可視化。
數據本身很難理解,但用圖表展示就一目了然。一張好的圖表能在幾秒內傳達復雜的信息,而表格需要幾分鐘才能理解。Python有多個可視化庫,從基礎的Matplotlib到高級的Plotly,本文將手把手教你用這些工具創建專業的數據可視化。

庫的選擇
# 不同場景下的最佳選擇
# 1. Matplotlib - 基礎靜態圖表(最靈活)
pip install matplotlib
# 2. Seaborn - 美觀的統計圖表(基于Matplotlib)
pip install seaborn
# 3. Plotly - 交互式圖表(最現代)
pip install plotly
# 4. Altair - 聲明式可視化(最簡潔)
pip install altair可視化1:銷售數據對比(柱狀圖)
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 準備數據
data = {
'月份': ['1月', '2月', '3月', '4月', '5月'],
'銷售額': [10000, 12000, 15000, 13000, 18000],
'目標額': [12000, 12000, 14000, 14000, 16000]
}
df = pd.DataFrame(data)
# 創建圖表
plt.figure(figsize=(10, 6))
x = range(len(df))
width = 0.35
# 繪制兩組柱子
plt.bar([i - width/2for i in x], df['銷售額'], width, label='實際銷售額')
plt.bar([i + width/2for i in x], df['目標額'], width, label='目標銷售額')
# 美化
plt.xlabel('月份', fontsize=12)
plt.ylabel('銷售額(元)', fontsize=12)
plt.title('2024年銷售業績對比', fontsize=14, fontweight='bold')
plt.xticks(x, df['月份'])
plt.legend()
plt.grid(axis='y', alpha=0.3)
# 顯示
plt.tight_layout()
plt.show()
# 保存為圖片
plt.savefig('sales_comparison.png', dpi=300, bbox_inches='tight')
可視化2:趨勢分析(折線圖)
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 時間序列數據
dates = pd.date_range('2024-01-01', periods=30)
values = [100, 105, 103, 110, 115, 118, 120, 125, 122, 128,
130, 135, 138, 140, 142, 145, 148, 150, 152, 155,
158, 160, 162, 165, 168, 170, 172, 175, 178, 180]
df = pd.DataFrame({'日期': dates, '訪問量': values})
# 繪制
plt.figure(figsize=(12, 6))
plt.plot(df['日期'], df['訪問量'], linewidth=2, marker='o', markersize=4)
# 添加趨勢線
import numpy as np
z = np.polyfit(range(len(df)), df['訪問量'], 2)
p = np.poly1d(z)
plt.plot(df['日期'], p(range(len(df))), 'r--', label='趨勢線', linewidth=2)
plt.xlabel('日期', fnotallow=12)
plt.ylabel('訪問量', fnotallow=12)
plt.title('網站月度訪問量趨勢', fnotallow=14, fnotallow='bold')
plt.legend()
plt.grid(alpha=0.3)
plt.xticks(rotatinotallow=45)
plt.tight_layout()
plt.show()
可視化3:分布分析(直方圖和密度圖)
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# 生成數據
data = np.random.normal(100, 15, 1000)
# 創建子圖
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 直方圖
axes[0].hist(data, bins=30, color='skyblue', edgecolor='black', alpha=0.7)
axes[0].set_title('銷售額分布(直方圖)', fnotallow=12, fnotallow='bold')
axes[0].set_xlabel('銷售額')
axes[0].set_ylabel('頻數')
# 密度圖
axes[1].hist(data, bins=30, density=True, alpha=0.5, label='直方圖')
sns.kdeplot(data, ax=axes[1], color='red', linewidth=2, label='密度曲線')
axes[1].set_title('銷售額分布(密度圖)', fnotallow=12, fnotallow='bold')
axes[1].set_xlabel('銷售額')
axes[1].legend()
plt.tight_layout()
plt.show()
可視化4:相關性分析(熱力圖)
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 創建相關數據
data = {
'銷售額': [10, 12, 15, 13, 18, 20, 22],
'廣告費': [2, 2.5, 3, 3.2, 4, 4.5, 5],
'訪問量': [1000, 1200, 1500, 1400, 1800, 2000, 2200],
'轉化率': [5, 6, 7, 6.5, 8, 8.5, 9]
}
df = pd.DataFrame(data)
# 計算相關系數
corr = df.corr()
# 繪制熱力圖
plt.figure(figsize=(8, 6))
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0,
square=True, linewidths=1, cbar_kws={"shrink": 0.8})
plt.title('各指標相關性分析', fnotallow=14, fnotallow='bold')
plt.tight_layout()
plt.show()
可視化5:交互式儀表板(Plotly)
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# 創建子圖
fig = make_subplots(
rows=2, cols=2,
subplot_titles=('銷售額趨勢', '月度對比', '分類占比', '排名TOP5'),
specs=[[{'type': 'scatter'}, {'type': 'bar'}],
[{'type': 'pie'}, {'type': 'bar'}]]
)
# 子圖1:銷售額趨勢
fig.add_trace(
go.Scatter(x=['1月', '2月', '3月', '4月', '5月'],
y=[10000, 12000, 15000, 13000, 18000],
mode='lines+markers', name='銷售額'),
row=1, col=1
)
# 子圖2:月度對比
fig.add_trace(
go.Bar(x=['1月', '2月', '3月'],
y=[10000, 12000, 15000], name='2024'),
row=1, col=2
)
# 子圖3:分類占比
fig.add_trace(
go.Pie(labels=['電子產品', '服裝', '食品', '其他'],
values=[30, 25, 20, 25]),
row=2, col=1
)
# 子圖4:排名TOP5
fig.add_trace(
go.Bar(x=['產品A', '產品B', '產品C', '產品D', '產品E'],
y=[5000, 4000, 3500, 3000, 2500],
marker_color='lightblue'),
row=2, col=2
)
# 更新布局
fig.update_layout(height=800, showlegend=False,
title_text="銷售數據儀表板")
# 顯示和保存
fig.show()
fig.write_html("dashboard.html") # 保存為互動HTML
可視化6:地圖可視化
import plotly.express as px
import pandas as pd
# 城市數據
data = {
'城市': ['北京', '上海', '深圳', '杭州', '南京'],
'緯度': [39.9, 31.2, 22.5, 30.3, 32.1],
'經度': [116.4, 121.5, 114.1, 120.2, 118.8],
'銷售額': [50000, 45000, 40000, 35000, 30000]
}
df = pd.DataFrame(data)
# 創建地圖
fig = px.scatter_geo(df,
lat='緯度',
lnotallow='經度',
size='銷售額',
hover_name='城市',
title='全國銷售額分布')
fig.show()
數據可視化是講故事的藝術。好的可視化不僅要美觀,更要準確地傳達信息。選擇合適的圖表類型是關鍵:趨勢用折線圖、對比用柱狀圖、分布用直方圖、關系用散點圖、占比用餅圖。一旦掌握了這些基礎圖表,你就能創建出專業的數據分析報告。
責任編輯:趙寧寧
來源:
Python數智工坊































