带有两条线和对数刻度 Y 轴的 Altair 线图

Altair Line Plot with Two Lines and Log-Scaled Y-Axis

我有这个数据框:

    btc_yields  Year    reit_yields
0   3619143193  2010    -3093
1   45790476    2011    -1833
2   37433124    2012    -1632
3   2739779     2013    13984
4   808407      2014    22776
5   1711472     2015    21642
6   685726      2016    21023
7   75958       2017    19760
8   49428       2018    20704
9   34330       2019    24687
10  27005       2020    21701

并且我生成了这个 btc_yields 的年份图:

使用此代码:

btc_yield_chart = alt.Chart(btc_yields_df).mark_line(color = 'orange', strokeWidth = 7).encode(
    x = alt.X('Year:N', title = 'Buy-in Year'),
    y = alt.Y('btc_yields', title = 'Yields in USD ($)', scale=alt.Scale(type='log')),
    tooltip = 'btc_yields'
).properties(
    width = 600,
    height = 400,
    title = 'Return on ,000 Seed Investment in Bitcoin by Buy-in Year'
).configure_axis(
    labelFontSize=14,
    titleFontSize=16
).configure_title(
    fontSize = 21
)
btc_yield_chart

我想使用分层图将 reit_yields 作为图表中的另一条线包含在内,但没有成功:

base = alt.Chart(merged_btc_reit_low_inf).encode(
    x = alt.X('Year:N', title = 'Buy-in Year'),
    ).properties(
    width = 600,
    height = 400,
    title = 'Return on ,000 Seed Investment in Bitcoin by Buy-in Year'
)
alt.layer(
    base.mark_line(color = 'orange', strokeWidth = 5).encode(
      y = alt.Y('btc_yields', title = 'BTC Yields in USD ($)', scale=alt.Scale(type='log')),
     tooltip = 'btc_yields'
    ),
    base.mark_line(color = 'blue', strokeWidth = 5).encode(
      y = alt.Y('reit_yields', title = 'REIT Yields in USD ($)', scale=alt.Scale(type='log')),
     tooltip = 'reit_yields'
    )
).configure_axis(
    labelFontSize=14,
    titleFontSize=16
).configure_title(
    fontSize = 21
)

如果我删除 scale=alt.Scale(type='log') 会生成图,但由于 y 轴不再按对数标度,因此该图根本无法提供信息。我想用这种分层格式帮助重新记录缩放 y 轴。谢谢!

负值的对数未定义,因此您需要 use the symmetric log 而不是:scale=alt.Scale(type='symlog')。 Symlog 还定义了零附近的线性范围,以避免接近无限的对数转换值。