为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 matplotlib/seaborn 中绘制每个子集的值计数?

如何在 matplotlib/seaborn 中绘制每个子集的值计数?

慕妹3146593 2023-08-15 16:50:52
我对 matplotlib 比较陌生,可能有更好的方法来处理这个问题。我试过了sns.countplot(),没有排序选项。所以我尝试用条形图和 pandas 来进行计数:my_data = pd.DataFrame({'actions': ['buy','buy','buy','observe','consult'] , 'places':['NY','AR','AR','NY','AR']})fig, axs = plt.subplots(1, 2, figsize = (5,7))axs = axs.ravel()for place in my_data['places']:     x = 0     temp_df = my_data[my_data['places'] == place]    axs[x] = sns.barplot(y=temp_df.actions.value_counts().index, x=temp_df.actions.value_counts().values, color="#43B8E7",orient = 'h')    axs[x].set_title(place)    x=+1数据看起来像   actions places0      buy     NY1      buy     AR2      buy     AR3  observe     NY4  consult     AR代码生成以下内容。正如您可能已经假设的那样,我还需要绘制 NY,但是,由于子集化或循环中遗漏的某些内容,它无法正常工作。如何解决这个问题?我觉得这个很简单,但是找不到。
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

您是否在寻找:


(my_data.groupby('places')['actions']

    .value_counts().unstack('places')

    .plot.bar(subplots=True)

)

或者类似地:


(pd.crosstab(my_data['actions'], my_data['places'])

    .plot.bar(subplots=True)

)

输出:

https://img1.sycdn.imooc.com//64db3cb800016dc503730308.jpg

如果你想要单杠:


(pd.crosstab(my_data['actions'], my_data['places'])

    .plot.barh(subplots=True, layout=[1,2])

)

输出:

https://img1.sycdn.imooc.com//64db3cc90001085204080259.jpg

或者我们可以修复您的代码:


fig, axs = plt.subplots(1, 2, figsize = (5,7))

axs = axs.ravel()

for ax,place in zip(axs,my_data['places'].unique()): 

    temp_df = my_data[my_data['places'] == place].actions.value_counts()

    sns.barplot(y=temp_df.index, x=temp_df, 

                color="#43B8E7", ax=ax, orient = 'h')

    ax.set_title(place)

输出(恕我直言,这不是很好对齐):

https://img1.sycdn.imooc.com//64db3cda0001547e03400435.jpg

查看完整回答
反对 回复 2023-08-15
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我会使用facetgrid,因为你已经在使用seaborn:


import pandas

import seaborn


axgrid = pandas.DataFrame({

    'actions': ['buy','buy','buy','observe','consult'] ,

    'places':['NY','AR','AR','NY','AR']

}).pipe((seaborn.catplot, 'data'), 

        y="actions", col="places",

        order=['buy', 'consult', 'observe'],

        kind="count"

)

https://img1.sycdn.imooc.com//64db3ce90001b83907270370.jpg

查看完整回答
反对 回复 2023-08-15
  • 2 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信