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

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

如何向 matplotlib/seaborn 條形圖添加第二個軸并使輔助點與正確的條形對齊?

如何向 matplotlib/seaborn 條形圖添加第二個軸并使輔助點與正確的條形對齊?

明月笑刀無情 2023-08-22 10:48:35
我寫了一個(新手)python 函數(如下)來繪制一個按主要維度和可能的次要維度劃分的條形圖。例如,下圖顯示了每種性別中獲得特定教育水平的人數百分比。問題:如何在每個條形上疊加該子組的家庭規模中位數,例如在大學/女性條形上放置一個表示值“3”的點。我見過的例子都沒有準確地將點覆蓋在正確的欄上。我對此非常陌生,所以非常感謝您的幫助!df = pd.DataFrame({'Student'       : ['Alice', 'Bob', 'Chris',  'Dave',    'Edna',    'Frank'],                    'Education'     : ['HS',    'HS',  'HS',     'College', 'College', 'HS'   ],                   'Household Size': [4,        4,     3,        3,         3,         6     ],                   'Gender'        : ['F',     'M',   'M',      'M',       'F',       'M'    ]});def MakePercentageFrequencyTable(dataFrame, primaryDimension, secondaryDimension=None, extraAggregatedField=None):    lod = dataFrame.groupby([secondaryDimension]) if secondaryDimension is not None else dataFrame    primaryDimensionPercent = lod[primaryDimension].value_counts(normalize=True) \                         .rename('percentage') \                         .mul(100) \                         .reset_index(drop=False);    if secondaryDimension is not None:        primaryDimensionPercent = primaryDimensionPercent.sort_values(secondaryDimension)        g = sns.catplot(x="percentage", y=secondaryDimension, hue=primaryDimension, kind='bar', data=primaryDimensionPercent)    else:        sns.catplot(x="percentage", y='index', kind='bar', data=primaryDimensionPercent)        MakePercentageFrequencyTable(dataFrame=df,primaryDimension='Education', secondaryDimension='Gender')# Question: I want to send in extraAggregatedField='Household Size' when I call the function such that # it creates a secondary 'Household Size' axis at the top of the figure# and aggregates/integrates the 'Household Size' column such that the following points are plotted# against the secondary axis and positioned over the given bars:## Female/College => 3# Female/High School => 4# Male/College => 3# Male/High School => 4到目前為止我所取得的成就的圖片
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

您將必須使用軸級函數sns.barplot()和sns.stripplot()而不是catplot(),它會創建一個新圖形和FacetGrid。


像這樣的東西:


df = pd.DataFrame({'Student'       : ['Alice', 'Bob', 'Chris',  'Dave',    'Edna',    'Frank'], 

                   'Education'     : ['HS',    'HS',  'HS',     'College', 'College', 'HS'   ],

                   'Household Size': [4,        4,     3,        3,         3,         6     ],

                   'Gender'        : ['F',     'M',   'M',      'M',       'F',       'M'    ]});



def MakePercentageFrequencyTable(dataFrame, primaryDimension, secondaryDimension=None, extraAggregatedField=None, ax=None):

    ax = plt.gca() if ax is None else ax

    lod = dataFrame.groupby([secondaryDimension]) if secondaryDimension is not None else dataFrame


    primaryDimensionPercent = lod[primaryDimension].value_counts(normalize=True) \

                         .rename('percentage') \

                         .mul(100) \

                         .reset_index(drop=False);


    if secondaryDimension is not None:

        primaryDimensionPercent = primaryDimensionPercent.sort_values(secondaryDimension)

        ax = sns.barplot(x="percentage", y=secondaryDimension, hue=primaryDimension, data=primaryDimensionPercent, ax=ax)

    else:

        ax = sns.barplot(x="percentage", y='index', data=primaryDimensionPercent, ax=ax)

    

    if extraAggregatedField is not None:

        ax2 = ax.twiny()

        extraDimension = dataFrame.groupby([primaryDimension, secondaryDimension]).mean().reset_index(drop=False)

        ax2 = sns.stripplot(data=extraDimension, x=extraAggregatedField, y=secondaryDimension, hue=primaryDimension, 

                            ax=ax2,dodge=True, edgecolors='k', linewidth=1, size=10)



plt.figure()

MakePercentageFrequencyTable(dataFrame=df,primaryDimension='Education', secondaryDimension='Gender', extraAggregatedField='Household Size')

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

查看完整回答
反對 回復 2023-08-22
  • 1 回答
  • 0 關注
  • 3905 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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