您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。