簡體   English   中英

在 Altair/Vega-lite 如何顯示分組類別的百分比而不是總數?

[英]In Altair/Vega-lite how to show percentage of grouped category instead of total?

新手使用 Altair/Vega-lite 並努力“獲得”轉換、計算和編碼思維方式,尤其是對於更復雜/嵌套的數據。

具體來說,我正在嘗試創建一個超級簡單的分層直方圖,顯示不同國家的工資分布。

到目前為止,我能夠在 Y 軸上獲得與總數相比的出現百分比:


salaries = {
    'NL': np.random.normal(loc=80000, scale=30000, size=(500,)),
    'ES': np.random.normal(loc=80000, scale=30000, size=(50,))
}
source = pd.DataFrame({k:pd.Series(v) for k,v in salaries.items()})

c = alt.Chart(source).transform_fold(
   ['NL', 'ES'],
   as_=['Benchmark', 'Salaries']
   ).transform_joinaggregate(
       total='count(*)',
       groupby=['Benchmark']
   ).transform_calculate(
       pct='1/ datum.total'
   ).mark_bar(opacity=0.3, binSpacing=0
   ).encode(
       alt.Color('Benchmark:N'),
       x=alt.X('Salaries:Q', bin=alt.Bin(maxbins=20)),
       y=alt.Y('sum(pct):Q', axis=alt.Axis(format='%'), stack=None)
   )

這導致:

總百分比

但是,我希望百分比適用於每個類別而不是總數。 因此,在此示例中,在 Y 軸上,第二個分布應顯示與第一個分布相同水平的百分比,因為它們是相同的正態分布。

我希望它足夠清楚,為可能缺乏統計理論和詞匯表來更好地解釋事情而道歉。

它按類別分組,但這里的問題是您的“ES”列有 450 個 nan 值,我猜這些值仍然計入count()中,因此實際值的百分比非常低。 解決此問題的一種方法是使用alt.Chart(source.dropna()) 這將產生下面的 plot。 陰謀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM