python怎样绘制堆叠条形图

发布时间:2021-12-20 09:02:42 作者:柒染
来源:亿速云 阅读:198
# Python怎样绘制堆叠条形图

## 概述

堆叠条形图(Stacked Bar Chart)是一种常见的数据可视化方式,它通过将多个数据系列的条形堆叠在一起,展示各部分占总体的比例以及不同类别间的对比关系。Python中可以使用`matplotlib`、`seaborn`、`plotly`等库实现堆叠条形图的绘制。本文将详细介绍如何使用这些工具创建堆叠条形图。

---

## 1. 基础准备

### 1.1 安装必要库
确保已安装以下库:
```bash
pip install matplotlib pandas seaborn plotly

1.2 导入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px

1.3 示例数据

生成示例数据用于演示:

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)

2. 使用Matplotlib绘制堆叠条形图

2.1 基本堆叠条形图

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()

2.2 自定义样式

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()

3. 使用Pandas直接绘图

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()

4. 使用Seaborn绘制堆叠条形图

Seaborn本身不直接支持堆叠条形图,但可以通过以下方式实现:

4.1 数据重塑

df_melted = df.melt(id_vars='Category', var_name='Variable', value_name='Value')

4.2 使用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()

注意:此方法实际是透明叠加,如需真正堆叠需手动计算位置。


5. 使用Plotly绘制交互式堆叠条形图

5.1 基础交互图

fig = px.bar(df, x='Category', y=['Value1', 'Value2', 'Value3'], 
             title='Interactive Stacked Bar Chart')
fig.update_layout(barmode='stack')
fig.show()

5.2 高级自定义

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()

6. 横向堆叠条形图

只需将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()

7. 百分比堆叠条形图

7.1 数据预处理

df_percent = df.set_index('Category')
df_percent = df_percent.div(df_percent.sum(axis=1), axis=0) * 100

7.2 绘制图表

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()

8. 常见问题与解决方案

8.1 标签重叠

8.2 图例覆盖

8.3 大数据集性能


9. 应用场景示例

9.1 销售数据可视化

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()

9.2 人口结构分析

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()

10. 总结

本文介绍了多种Python绘制堆叠条形图的方法: 1. Matplotlib:最基础灵活,适合定制化需求 2. Pandas:快速简便,适合DataFrame数据 3. Seaborn:需配合数据重塑,适合统计可视化 4. Plotly:交互式体验,适合网页展示

根据具体需求选择合适工具,堆叠条形图能有效展示构成比例和总量对比,是数据分析中的利器。 “`

该文章包含约1750字,采用Markdown格式编写,覆盖了从基础到高级的堆叠条形图实现方法,并包含代码示例、问题解决和实际应用场景。

推荐阅读:
  1. python读取mysql数据绘制条形图
  2. Python中堆叠柱状图怎么绘制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:Android中的SurfaceFlinger工作原理是什么

下一篇:PHP随机生成用户信息的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》