簡體   English   中英

排序在 Altair 分層條形圖中丟失,帶有誤差條

[英]Sorting lost in Altair layered bar chart with error bars

我正在為條形圖使用自定義排序,並且效果很好。 但是,當我想向其中添加誤差線並使用分層圖表時,不再考慮排序。 我還定義了axis = None ,這也沒有考慮到。

下面是一個數據示例:

df = pd.DataFrame(
    {'size' : ['huge', 'huge', 'huge', 'huge', 'huge', 'huge', 'big', 'big', 'big',  'big', 'big', 'big', 'small', 'small', 'small', 'small', 'small', 'small'],
     'weight': ['10 mg', '10 mg', '10 g', '10 g', '10 kg', '10 kg', '10 mg', '10 mg', '10 g', '10 g', '10 kg', '10 kg','10 mg', '10 mg', '10 g', '10 g', '10 kg', '10 kg'],
     'value': [3.5,2.6,5.1,6.5,2.3,4.6,7.1,2.8,6.9,1.5,2.6,2.8,6.9,2.3,4.6,3.5,2.6,5.1]
    }
)

僅使用條形圖有效

alt.Chart(df).mark_bar().encode(
    x = alt.X('weight:O', title=None, axis=None, sort=['10 kg', '10 g', '10 mg']),
    y = alt.Y('mean(value)', title='Value'),
    color = alt.Color('weight:O', sort=['10 kg', '10 g', '10 mg']),
    column = alt.Column('size', sort=['huge', 'big', 'small'])
)

在此處輸入圖片說明

但不再有誤差條:

error_bars = alt.Chart().mark_errorbar(extent='ci').encode(
    x=alt.X('weight:O', sort=['10 kg', '10 g', '10 mg']),
    y='value:Q'
)

bars = alt.Chart().mark_bar().encode(
    x = alt.X('weight:O', title=None, axis=None, sort=['10 kg', '10 g', '10 mg']),
    y = alt.Y('mean(value)', title='Value'),
    color = alt.Color('weight:O', sort=['10 kg', '10 g', '10 mg'])
)

alt.layer(bars, error_bars, data=df).facet(
    column = alt.Column('size', sort=['huge', 'big', 'small'])
)

在此處輸入圖片說明

在這兩個圖中, axistitle都設置為None但在分層圖表中未考慮在內。 奇怪的是排序考慮了圖例(見color = ... )而不是 x 軸(在每個尺寸內)。

有沒有辦法解決這個問題,或者我沒有正確使用分層圖表?

要隱藏分層圖表中的軸,您應該在兩個圖層中設置axis=Nonetitle=None

error_bars = alt.Chart().mark_errorbar(extent='ci').encode(
    x=alt.X('weight:O',  title=None, axis=None, sort=['10 kg', '10 g', '10 mg']),
    y='value:Q'
)

bars = alt.Chart().mark_bar().encode(
    x = alt.X('weight:O', title=None, axis=None, sort=['10 kg', '10 g', '10 mg']),
    y = alt.Y('mean(value)', title='Value'),
    color = alt.Color('weight:O', sort=['10 kg', '10 g', '10 mg'])
)

alt.layer(bars, error_bars, data=df).facet(
    column = alt.Column('size', sort=['huge', 'big', 'small'])
)

在此處輸入圖片說明

您會注意到我的圖表版本具有正確的排序順序:這是因為我使用的是 Altair 4.0 版。 在早期版本的 Altair/Vega-Lite 中存在一個錯誤,該錯誤會阻止排序在分層圖表中正常運行。

更新到 Altair 4.0 或更高版本,您的排序將起作用。

暫無
暫無

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

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