You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Altair中缩放盈利数据以适配股价图层?

解决股价与盈利数据量级差异的叠加显示问题

方法1:使用双Y轴(推荐方案)

双Y轴是处理跨量级数据叠加的标准方案,能让股价和盈利各自使用独立的Y轴刻度,既保留数据准确性,又清晰展示两者的时间对应关系。

实现思路:

  • 保留股价图表的原始Y轴(对应50-100美元的股价范围)
  • 为盈利图表配置独立的Y轴,通过resolve_scale(y='independent')让两个图层的Y轴缩放完全独立

示例代码:

# 假设股价图表基础配置如下
price_chart = alt.Chart(price_df).mark_line(color="blue").encode(
    x='Date:T',
    y='Close:Q',
    tooltip=['Date:T', 'Close:Q']
)

# 修改预期盈利图表的Y轴配置,指定独立缩放与轴标签
expected_chart = alt.Chart(earnings_df).mark_point(
    size=point_size, 
    strokeWidth=stroke_size, 
    color="gray"
).encode(
    x='Date:T',
    y=alt.Y(
        "EstimatedEarning:Q", 
        axis=alt.Axis(title='盈利(美元)', labels=True), 
        scale=alt.Scale(domain=[min_earning, max_earning])
    ),
    tooltip=tooltip,
).transform_filter(date_filter)

# 实际盈利图表同理
actual_chart = alt.Chart(earnings_df).mark_point(
    size=point_size, 
    strokeWidth=stroke_size, 
    color="green"
).encode(
    x='Date:T',
    y=alt.Y(
        "ActualEarning:Q", 
        axis=alt.Axis(title='盈利(美元)', labels=True), 
        scale=alt.Scale(domain=[min_earning, max_earning])
    ),
    tooltip=tooltip,
).transform_filter(date_filter)

# 叠加所有图表并启用独立Y轴
combined_chart = (price_chart + expected_chart + actual_chart).resolve_scale(
    y='independent'
).properties(
    title=f"{symbol_name} 季度股价与盈利对比",
    height=500,
    width=800
)

方法2:对盈利数值进行缩放转换

如果不想使用双Y轴,可以通过计算将盈利数值放大到股价的量级范围,同时在tooltip或轴标签中明确说明实际值。

示例代码:

# 定义缩放系数,比如将盈利乘以100,匹配50-100的股价范围
scale_factor = 100

expected_chart = alt.Chart(earnings_df).mark_point(
    size=point_size, 
    strokeWidth=stroke_size, 
    color="gray"
).encode(
    x='Date:T',
    y=alt.Y(
        f"EstimatedEarning:Q * {scale_factor}:Q", 
        axis=alt.Axis(title=f'盈利(实际值 = 显示值/{scale_factor} 美元)'),
        scale=alt.Scale(domain=[50, 100]) # 对齐股价的Y轴范围
    ),
    # Tooltip显示原始盈利值,避免误导
    tooltip=[
        'Date:T',
        alt.Tooltip('EstimatedEarning:Q', title='预期盈利(美元)')
    ]
).transform_filter(date_filter)

# 实际盈利图表同理,之后与股价图表叠加即可

方法3:手动偏移盈利数据(仅可视化需求)

如果只是想让盈利点显示在图表上方区域,可直接手动偏移盈利数值的scale domain,但这种方法会扭曲盈利数据的实际数值关系,仅适合纯展示场景:

expected_chart = alt.Chart(earnings_df).mark_point(
    size=point_size, 
    strokeWidth=stroke_size, 
    color="gray"
).encode(
    x=x_axis,
    y=alt.Y(
        "EstimatedEarning:Q", 
        axis=alt.Axis(labels=True, title='盈利'), 
        scale=alt.Scale(domain=[min_earning + 49.5, max_earning + 49.5]) # 手动偏移到股价范围
    ),
    tooltip=tooltip,
).transform_filter(date_filter)

内容的提问来源于stack exchange,提问作者engineer-x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:27:35