我正在使用 hvplot 在子图中绘制几个具有不同大小的变量。我想分别为每个子图指定 y 限制。但是,据我所知,使用 hvplot,我只能ylim
为所有子图指定一个。问题的背景是我想创建一个使用小部件表示额外维度的图。我不希望轴限制随着小部件参数的不同值而变化。
我的问题的简化版本如下所示:
import numpy as np
import xarray as xr
import hvplot.xarray
n_x = 100
n_time = 200
ds = xr.Dataset(
data_vars={
"a": (("x", "time"), np.random.rand(n_x, n_time)),
"b": (("x", "time"), np.random.rand(n_x, n_time) * 10 + np.arange(n_time)[None, :]),
},
coords={
'x': ('x', np.arange(n_x)),
'time': ('time', np.arange(n_time))
}
)
plot = ds.hvplot.line(
x="x",
subplots=True,
shared_axes=False,
width=350,
height=300,
)
右图的轴范围会随着时间而变化,我想防止这种情况发生。我曾尝试像这样直接处理 Holoviews 对象,但它似乎不起作用。
bounds = {'a': (0, 1), 'b': (0, n_time)}
plot.redim.range(**bounds)
我想问题出在这个问题上,'a'
而'b'
不是 y 轴上的实际尺寸。有谁知道该怎么做?
编辑
我找到了一种解决方法,将子图分开,单独更改每个轴的范围,然后在新布局中再次将它们粘合在一起:
import holoviews as hv
container = plot.collate()
subplots = {key: dmap.redim.range(value=bounds[key]) for key, dmap in container.items()}
new_layout = hv.NdLayout(subplots, kdims='Variable')
new_layout
不过,我还是觉得应该有更优雅的方式……</p>