# Python怎樣繪制堆疊條形圖
## 概述
堆疊條形圖(Stacked Bar Chart)是一種常見的數據可視化方式,它通過將多個數據系列的條形堆疊在一起,展示各部分占總體的比例以及不同類別間的對比關系。Python中可以使用`matplotlib`、`seaborn`、`plotly`等庫實現堆疊條形圖的繪制。本文將詳細介紹如何使用這些工具創建堆疊條形圖。
---
## 1. 基礎準備
### 1.1 安裝必要庫
確保已安裝以下庫:
```bash
pip install matplotlib pandas seaborn plotly
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
生成示例數據用于演示:
data = {
'Category': ['A', 'B', 'C', 'D'],
'Value1': [20, 35, 30, 25],
'Value2': [15, 25, 20, 30],
'Value3': [10, 15, 25, 20]
}
df = pd.DataFrame(data)
categories = df['Category']
values1 = df['Value1']
values2 = df['Value2']
values3 = df['Value3']
plt.figure(figsize=(10, 6))
plt.bar(categories, values1, label='Value1')
plt.bar(categories, values2, bottom=values1, label='Value2')
plt.bar(categories, values3, bottom=values1+values2, label='Value3')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Stacked Bar Chart with Matplotlib')
plt.legend()
plt.show()
plt.figure(figsize=(10, 6))
colors = ['#FF9999', '#66B2FF', '#99FF99']
plt.bar(categories, values1, color=colors[0], edgecolor='black', label='Value1')
plt.bar(categories, values2, bottom=values1, color=colors[1], edgecolor='black', label='Value2')
plt.bar(categories, values3, bottom=values1+values2, color=colors[2], edgecolor='black', label='Value3')
plt.xlabel('Categories', fontsize=12)
plt.ylabel('Values', fontsize=12)
plt.title('Customized Stacked Bar Chart', fontsize=14)
plt.legend(loc='upper right')
plt.grid(axis='y', alpha=0.5)
plt.show()
Pandas的DataFrame.plot()
方法可以快速生成堆疊條形圖:
df.set_index('Category').plot(kind='bar', stacked=True, figsize=(10, 6))
plt.title('Stacked Bar Chart with Pandas')
plt.ylabel('Values')
plt.xticks(rotation=0)
plt.show()
Seaborn本身不直接支持堆疊條形圖,但可以通過以下方式實現:
df_melted = df.melt(id_vars='Category', var_name='Variable', value_name='Value')
barplot
疊加plt.figure(figsize=(10, 6))
sns.barplot(x='Category', y='Value', hue='Variable', data=df_melted, dodge=False)
plt.title('Stacked Bar Chart with Seaborn')
plt.show()
注意:此方法實際是透明疊加,如需真正堆疊需手動計算位置。
fig = px.bar(df, x='Category', y=['Value1', 'Value2', 'Value3'],
title='Interactive Stacked Bar Chart')
fig.update_layout(barmode='stack')
fig.show()
fig = px.bar(df, x='Category', y=['Value1', 'Value2', 'Value3'],
color_discrete_sequence=['#636EFA', '#EF553B', '#00CC96'],
title='Advanced Stacked Bar Chart',
labels={'value': 'Total Value'})
fig.update_layout(
barmode='stack',
hovermode='x unified',
legend_title_text='Variables'
)
fig.show()
只需將bar
改為barh
:
plt.figure(figsize=(10, 6))
plt.barh(categories, values1, label='Value1')
plt.barh(categories, values2, left=values1, label='Value2')
plt.barh(categories, values3, left=values1+values2, label='Value3')
plt.title('Horizontal Stacked Bar Chart')
plt.legend()
plt.show()
df_percent = df.set_index('Category')
df_percent = df_percent.div(df_percent.sum(axis=1), axis=0) * 100
df_percent.plot(kind='bar', stacked=True, figsize=(10, 6))
plt.title('100% Stacked Bar Chart')
plt.ylabel('Percentage (%)')
plt.ylim(0, 100)
plt.show()
figsize
或使用旋轉標簽:
plt.xticks(rotation=45)
plt.legend(bbox_to_anchor=(1.05, 1))
plotly
的WebGL渲染sales_data = pd.DataFrame({
'Quarter': ['Q1', 'Q2', 'Q3', 'Q4'],
'Product_A': [230, 145, 180, 210],
'Product_B': [120, 190, 210, 140],
'Product_C': [90, 110, 150, 180]
})
sales_data.set_index('Quarter').plot(kind='bar', stacked=True)
plt.title('Quarterly Sales by Product')
plt.ylabel('Revenue (k$)')
plt.show()
age_data = pd.DataFrame({
'Country': ['USA', 'China', 'Japan'],
'0-14': [18.5, 17.2, 12.4],
'15-64': [65.3, 70.1, 59.4],
'65+': [16.2, 12.7, 28.2]
})
fig = px.bar(age_data, x='Country', y=['0-14', '15-64', '65+'],
title='Population Age Structure')
fig.update_layout(barmode='stack')
fig.show()
本文介紹了多種Python繪制堆疊條形圖的方法: 1. Matplotlib:最基礎靈活,適合定制化需求 2. Pandas:快速簡便,適合DataFrame數據 3. Seaborn:需配合數據重塑,適合統計可視化 4. Plotly:交互式體驗,適合網頁展示
根據具體需求選擇合適工具,堆疊條形圖能有效展示構成比例和總量對比,是數據分析中的利器。 “`
該文章包含約1750字,采用Markdown格式編寫,覆蓋了從基礎到高級的堆疊條形圖實現方法,并包含代碼示例、問題解決和實際應用場景。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。