簡體   English   中英

如何將第二個 y 軸添加到條形圖? 牽牛星

[英]How to add second y-axis to the bar chart? Altair

我有一個 DataFrame:

  EMOJI   PERCENT_TEXT    PERCENT     combined
0  😂         23.1%        23.1       😂 23.1%
1  🥊         5.7%          5.7       🥊 5.7% 
2  👊         3.5%          3.5       👊 3.5%
3  👏         3.0%          3.0       👏 3.0%
4  💪         2.5%          2.5       💪 2.5%
5  🇮🇪          2.4%          2.4        🇮🇪  2.4%

我的代碼如下:

bars = alt.Chart(percentages_df).mark_bar(color='orange').encode(
    alt.X('PERCENT:Q',axis=None),
    alt.Y('combined:N', sort='-x', title=None)
).configure_view(strokeOpacity=0).configure_axis(
    # remove axis line
    grid=False, domain=False,ticks=False
)

在此處輸入圖像描述

但是我創建的圖表不是我所期望的。

我想用 Altair 創建一個帶有兩個 y 軸標簽的條形圖,如下所示: 在此處輸入圖像描述

我應該使用層來生成這個圖表嗎? 如果是這樣,如何生成兩個 y 軸標簽的層? 如果沒有,我應該用什么來生成它? 謝謝!

我不知道有什么簡單的方法可以創建兩組不同的軸標簽,但是您可以通過調整軸 label 屬性大致完成您想要的 alignment 。

我還更改了圖表以使用轉換創建組合 label:

import pandas as pd
import altair as alt

percentages_df = pd.DataFrame({
  'EMOJI': ['😂', '🥊', '👊', '👏', '💪', '🇮🇪'],
  'PERCENT': [23.1, 5.7, 3.5, 3.0, 2.5, 2.4]
})

alt.Chart(percentages_df).transform_calculate(
    combined = alt.datum.EMOJI + '    ' + alt.datum.PERCENT + '%'
).mark_bar(color='orange').encode(
    alt.X('PERCENT:Q',axis=None),
    alt.Y('combined:N', sort='-x', title=None,
          axis=alt.Axis(labelAlign='left', labelPadding=6))
).configure_view(strokeOpacity=0).configure_axis(
    # remove axis line
    grid=False, domain=False,ticks=False
)

圖表

另一種選擇是連接兩個圖表,其中一個沒有 x 編碼:

import pandas as pd
import altair as alt

percentages_df = pd.DataFrame({
  'EMOJI': ['😂', '🥊', '👊', '👏', '💪', '🇮🇪'],
  'PERCENT': [23.1, 5.7, 3.5, 3.0, 2.5, 2.4]
})

right = alt.Chart(percentages_df).mark_bar(color='orange').encode(
    alt.X('PERCENT:Q',axis=None),
    alt.Y('PERCENT:N', sort='-x', title=None)
)

left = alt.Chart(percentages_df).mark_text().encode(
    alt.Y('EMOJI:N', sort=alt.EncodingSortField('PERCENT', order="descending"), title=None)
)

alt.hconcat(
    left, right
).configure_view(strokeOpacity=0).configure_axis(
    # remove axis line
    grid=False, domain=False,ticks=False
)

圖2

您也可以嘗試通過rjust填充用於用空格標記的字符串。 為此,您必須使用等寬字體,以便所有字符都等於:

# With your df above
df['LABEL'] = df['EMOJI'] + df['PERCENT_TEXT'].str.rjust(8)

alt.Chart(df).mark_bar(color='orange').encode(
    alt.X('PERCENT:Q',axis=None),
    alt.Y('LABEL:N', sort='-x', title=None, axis=alt.Axis(labelFont='Droid Sans Mono'))
).configure_view(strokeOpacity=0).configure_axis(
    grid=False, domain=False,ticks=False
)

在此處輸入圖像描述

暫無
暫無

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

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