1

我正在使用 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>

4

0 回答 0