簡體   English   中英

Altair:排序分面“文本”圖表未反映預期

[英]Altair: Sorting faceted "text" chart not reflecting expectation

這是基於 Altair 中的 alt.Color 字段使用相同數據幀(為了便於參考而包含在內)的直接后續操作。 我在評論部分詢問了后續問題,但在我自己試了一下並接近之后,我正在創建一個新問題。

Unnamed: 0,Species,Unknown,group,LDA Score,p value
11,a,3.474929757,bad,3.07502591,5.67e-05
16,b,3.109308852,bad,2.739744898,0.000651725
31,c,3.16979865,bad,2.697247855,0.03310557
38,d,0.06730106400000001,bad,2.347746497,0.013009626000000002
56,e,2.788383183,good,2.223874347,0.0027407140000000004
65,f,2.644346144,bad,2.311106698,0.00541244
67,g,3.626001112,good,2.980960068,0.038597163
74,h,3.132399759,good,2.849798377,0.007021518000000001
117,i,3.192113412,good,2.861299028,8.19e-06
124,j,0.6140430960000001,bad,2.221483531,0.0022149739999999998
147,k,2.873671544,bad,2.390164757,0.002270102
184,l,3.003479213,bad,2.667274876,0.008129727
188,m,2.46344998,good,2.182085465,0.001657861
256,n,0.048663767,bad,2.952260299,0.013009626000000002
285,o,2.783848855,good,2.387345098,0.00092491
286,p,3.636218971,good,3.094046639,0.001584756

后續問題是在按“顏色”分組之后,如何按“LDA 分數”或基本上按條長在組內進行后續排序,並讓文本列也按 LDA 排序。 我不知道如何在我使用的代碼中加入第二級或排序,所以我選擇將組轉換為面,然后嘗試按 LDA 分數對條形圖和文本列進行排序。 我通過圖表上的 LDA 分數得到了正確的排序,但我似乎無法使其適用於文本列。 我正在粘貼代碼和圖像。 如您所見,我告訴它使用 LDA Score 作為“文本”圖表(即 pvalue)的排序字段,但它仍然按物種的字母順序排序。 有什么想法嗎? 老實說,我覺得我正朝着兔子洞前進,我正在強制解決方案在當前代碼中工作,所以如果您認為完全不同的策略是更好的方法,請告訴我。

僅供參考,您現在可以忽略一些格式問題(例如軸上的冗余標簽)。

bars = alt.Chart(df).mark_bar().encode(
    alt.X('LDA Score'),
    alt.Y("Species:N", sort='-x'),
    color='group:N',
    row='group:N'
).resolve_scale(y='independent'
)

text = alt.Chart(df).mark_text().encode(
    alt.Text('p value:Q', format='.2e'),
    alt.Y('Species:N', sort=alt.EncodingSortField(field='LDA Score', op='count', order='descending')),
    row='group:N'
).resolve_scale(y='independent'
).properties(width=50)

#bars | text
alt.hconcat(bars, text, spacing=0)

在此處輸入圖片說明

刪除op="count" 每行中的計數正好是 1(每行中有一個數據點)。 聽起來您想改為按數據值排序。

在這種情況下,對兩種 y 編碼使用相同的排序表達式也是有意義的,因為它們旨在匹配:

y_sort = alt.EncodingSortField(field='LDA Score', order='descending')

bars = alt.Chart(df).mark_bar().encode(
    alt.X('LDA Score'),
    alt.Y("Species:N", sort=y_sort),
    color='group:N',
    row='group:N'
).resolve_scale(
    y='independent'
)

text = alt.Chart(df).mark_text().encode(
    alt.Text('p value:Q', format='.2e'),
    alt.Y("Species:N", sort=y_sort, axis=None),
    alt.Row('group:N', header=alt.Header(title=None, labelFontSize=0))
).resolve_scale(
    y='independent'
).properties(width=50)

alt.hconcat(bars, text, spacing=0)

在此處輸入圖片說明

labelFontSize是一種解決方法,因為labels=False

暫無
暫無

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

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