亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號