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

HoloViews布局中散点图与误差棒图设置独立Y轴范围

解决HoloViews布局中独立Y轴范围的问题

当然可以搞定这个问题!我之前也遇到过类似的情况,HoloViews默认会让布局里的同类型轴共享范围,这就导致数据量级差很大的图表显示异常,不过解决方法很简单,有两种常用的思路:

方法一:关闭轴共享(推荐,自动适配数据范围)

只需要在创建布局的时候设置shared_axes=False,就能让每个子图自动根据自身数据计算合适的Y轴范围。先补全你给出的示例代码,完整实现如下:

import holoviews as hv
hv.extension('bokeh')  # 这里用Bokeh后端,也可以替换成matplotlib

# 你的数据
A_points = [ ("2000", 1.5, 0.3, 0.5), ("2015", 2.3, 0.7, 0.3) ]
B_points = [ ("2000", 13000, 800, 200), ("2015", 12000, 400, 600) ]

# 创建带误差棒的散点图
plot_a = hv.Scatter(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"]) * \
         hv.ErrorBars(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"])
plot_b = hv.Scatter(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"]) * \
         hv.ErrorBars(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"])

# 设置散点图样式并创建布局,关闭轴共享
layout = hv.Layout(plot_a + plot_b).opts(
    hv.opts.Scatter(size=10),
    hv.opts.ErrorBars(),
    shared_axes=False
)

layout

这样设置后,两个图表会各自使用适配自身数据的Y轴范围,不会再被另一个图表的范围影响。

方法二:手动指定单个图表的Y轴范围

如果你想更精准地控制某个图表的Y轴范围,可以单独给每个图表设置Y轴的range参数,示例如下:

import holoviews as hv
hv.extension('bokeh')

A_points = [ ("2000", 1.5, 0.3, 0.5), ("2015", 2.3, 0.7, 0.3) ]
B_points = [ ("2000", 13000, 800, 200), ("2015", 12000, 400, 600) ]

plot_a = hv.Scatter(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"]) * \
         hv.ErrorBars(A_points, kdims=["Year"], vdims=["A", "yerr_minus", "yerr_plus"])
# 手动指定A图表的Y轴范围
plot_a = plot_a.opts(
    hv.opts.Scatter(size=10),
    hv.opts.ErrorBars(),
    hv.opts.Axis(yaxis=dict(range=(1, 3)))
)

plot_b = hv.Scatter(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"]) * \
         hv.ErrorBars(B_points, kdims=["Year"], vdims=["B", "yerr_minus", "yerr_plus"])
# B图表让HoloViews自动计算Y轴范围
plot_b = plot_b.opts(
    hv.opts.Scatter(size=10),
    hv.opts.ErrorBars()
)

layout = hv.Layout(plot_a + plot_b)
layout

另外,如果你用Row或Column布局来排列图表,同样可以通过shared_axes=False参数实现独立轴范围,比如hv.Row(plot_a, plot_b).opts(shared_axes=False)。

内容的提问来源于stack exchange,提问作者Bruno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:44:41