# 怎么用Python中的Pandas庫繪制數據
Pandas是Python中最流行的數據分析庫之一,它內置了基于Matplotlib的繪圖功能,可以快速實現數據可視化。本文將詳細介紹如何用Pandas繪制常見圖表,并附上完整代碼示例。
## 一、Pandas繪圖基礎
### 1.1 準備工作
首先需要安裝Pandas和Matplotlib庫:
```python
pip install pandas matplotlib
導入基礎庫并準備示例數據:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 創建示例DataFrame
np.random.seed(42)
df = pd.DataFrame({
'A': np.random.randn(100),
'B': np.random.rand(100)*100,
'C': np.random.randint(0, 10, 100),
'D': pd.date_range('2023-01-01', periods=100)
})
Pandas繪圖有兩種主要方式:
1. 直接使用DataFrame的plot()
方法
2. 通過df.plot.<圖表類型>()
的快捷方式
# 基本線圖
df['A'].plot()
# 等價寫法
df['A'].plot.line()
最適合展示時間序列數據:
df.set_index('D')['B'].plot(
title='時間序列折線圖',
figsize=(10, 5),
grid=True,
xlabel='日期',
ylabel='數值'
)
plt.show()
比較不同類別的數值:
# 分組計算平均值
df.groupby('C')['B'].mean().plot.bar(
color='skyblue',
edgecolor='black',
title='類別平均值比較'
)
plt.xticks(rotation=0)
plt.show()
展示數據分布:
df['A'].plot.hist(
bins=20,
alpha=0.7,
density=True,
title='數據分布直方圖'
)
plt.grid(axis='y')
plt.show()
顯示數據統計特征:
df.plot.box(
patch_artist=True,
vert=False,
meanline=True,
showmeans=True
)
plt.title('數據分布箱線圖')
plt.show()
展示兩個變量的關系:
df.plot.scatter(
x='A',
y='B',
c='C', # 用顏色表示第三個維度
cmap='viridis',
s=50, # 點大小
alpha=0.7
)
plt.title('A與B的相關性分析')
plt.show()
展示部分與整體的關系:
df[['A', 'B']].abs().rolling(10).mean().plot.area(
alpha=0.5,
stacked=False
)
plt.title('移動平均面積圖')
plt.show()
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
df['A'].plot.hist(ax=axes[0,0], title='分布')
df['B'].plot.box(ax=axes[0,1], title='離群值')
df.plot.scatter(x='A', y='B', ax=axes[1,0], title='相關性')
df['C'].value_counts().plot.pie(ax=axes[1,1], title='類別占比')
plt.tight_layout()
plt.show()
ax = df['A'].abs().plot(
style='--', # 線型
color='red', # 顏色
marker='o', # 標記點
markersize=4, # 標記大小
linewidth=1, # 線寬
title='樣式定制示例',
label='絕對值'
)
ax.set_facecolor('#f5f5f5') # 背景色
ax.grid(color='white', linestyle='-', linewidth=1)
ax.legend()
plt.show()
ts = pd.Series(
np.random.randn(1000),
index=pd.date_range('2023-01-01', periods=1000)
)
ts.resample('M').mean().plot(
kind='bar',
width=0.8,
title='按月重采樣'
)
plt.xticks(rotation=45)
plt.show()
# 獲取示例數據
import yfinance as yf
data = yf.download('AAPL', start='2022-01-01', end='2023-01-01')
# 繪制移動平均線
ax = data['Close'].plot(label='收盤價', figsize=(12,6))
data['Close'].rolling(20).mean().plot(ax=ax, label='20日均線')
data['Close'].rolling(50).mean().plot(ax=ax, label='50日均線')
ax.set_title('蘋果公司股價分析')
ax.legend()
plt.show()
sales = pd.DataFrame({
'Month': pd.date_range('2023-01-01', periods=12, freq='M'),
'Product_A': np.random.randint(50, 200, 12),
'Product_B': np.random.randint(30, 150, 12),
'Product_C': np.random.randint(20, 100, 12)
})
sales.set_index('Month').plot(
kind='area',
stacked=True,
alpha=0.6,
title='2023年產品銷售構成'
)
plt.ylabel('銷售量')
plt.show()
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
plt.rcParams['axes.unicode_minus'] = False
df.plot().get_figure().savefig('output.png', dpi=300)
df.sample(1000).plot() # 隨機采樣
Pandas繪圖功能雖然基于Matplotlib,但提供了更簡潔的API,特別適合快速數據探索。關鍵要點:
- 使用plot()
方法及其變體繪制不同類型圖表
- 通過參數自定義圖表樣式和布局
- 結合Matplotlib實現更復雜的可視化需求
- 時間序列數據有專門的優化處理
掌握這些技巧后,你可以高效地將數據轉化為直觀的可視化結果,為數據分析工作提供有力支持。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。