首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中通过分组值绘制条形图

在python中通过分组值绘制条形图
EN

Stack Overflow用户
提问于 2018-06-16 12:07:31
回答 1查看 1.1K关注 0票数 1

我想绘制一个条形图,我需要在其中比较两个地区相对于RegionTier的销售额。

我实现了以下代码:

代码语言:javascript
复制
df.groupby(['Region','Tier'],sort=True).sum()[['Sales2015','Sales2016']].unstack().plot(kind="bar",width = .8)

但我希望同时实现Tier 2015和2016年的销售,例如,在x轴上,xticks应该看起来像2015年和2016年的高销售,等等。

EN

回答 1

Stack Overflow用户

发布于 2018-06-18 06:46:30

数据生成:我使用以下代码随机生成了您的数据:

代码语言:javascript
复制
import numpy as np
import pandas as pd

# The number of demo data count
demo_num = 20

# Regions
regions = ['central', 'east', 'west']
np.random.seed(9)
regions_r = np.random.choice(regions, demo_num)

# Tiers
tiers = ['hi', 'lo', 'mid']
np.random.seed(99)
tiers_r = np.random.choice(tiers, demo_num)

# Sales
sales2015 = np.array(range(demo_num)) * 100 
sales2016 = np.array(range(demo_num)) * 200

# Dataframe `df` to store all above
df = pd.DataFrame({'Region': regions_r, 'Tier': tiers_r, 'Sales2015': sales2015, 'Sales2016': sales2016})

数据:现在输入的数据如下所示

代码语言:javascript
复制
    Region  Sales2015   Sales2016   Tier
0   west    0           0           lo
1   central 100         200         lo
2   west    200         400         hi
3   east    300         600         lo
4   west    400         800         hi
5   central 500         1000        mid
6   west    600         1200        hi
7   east    700         1400        lo
8   east    800         1600        hi
9   west    900         1800        lo
10  central 1000        2000        mid
11  central 1100        2200        lo
12  west    1200        2400        lo
13  east    1300        2600        hi
14  central 1400        2800        lo
15  east    1500        3000        mid
16  east    1600        3200        hi
17  east    1700        3400        mid
18  central 1800        3600        hi
19  central 1900        3800        hi

可视化的代码:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import pandas as pd

# Summary statistics        
df = df.groupby(['Tier', 'Region'], sort=True).sum()[['Sales2015', 'Sales2016']].reset_index(level=1, drop=False)

# Loop over Regions and visualize graphs side by side
regions = df.Region.unique().tolist()
fig, axes = plt.subplots(ncols=len(regions), nrows=1, figsize=(10, 5), sharex=False, sharey=True)

for region, ax in zip(regions, axes.ravel()):
    df.loc[df['Region'] == region].plot(ax=ax, kind='bar', title=region)
plt.tight_layout()
plt.show()

结果: Now图形如下所示。我没有优化字体大小等。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50884859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档