5

我想使用 holoviews/hvplot 将几个数据绘制到一个网格中,基于一个维度,其中包含几个唯一的数据点。

考虑这个例子:

import seaborn as sns
import hvplot.pandas

iris = sns.load_dataset('iris')
plot = iris.hvplot.scatter(x="sepal_length", y="sepal_width", col="species")
hvplot.show(plot)

上面的代码根据 iris 数据集的物种部分创建了几个图,结果如下图:
列太多的 hvplot 网格空间示例

但现在想象一下,不是 3 个不同的物种,而是 20 个。情节会变宽,所以我想在几个情节之后打破界限。但我找不到任何“最大列”参数。普通网格需要另一列来定义我没有的行。

任何建议都会有所帮助。

4

2 回答 2

2

在您的情况下,我不会创建Gridspace(通过使用关键字 'row' 和 'col'),而是创建Layout当你有一个布局时,你可以使用.cols(2)
轻松调整列数。

使用 hvplot 你必须使用关键字 'by' 和 'subplots=True' 而不是 'col'。

请看下面的代码:

iris.hvplot.scatter(
    x='sepal_length',
    y='sepal_width',
    by='species',
    subplots=True,
).cols(2)


结果图:

创建布局以显示绘图

于 2020-01-08T08:45:52.883 回答
1

上面调用返回的 HoloViews 对象是一个 GridSpace,它使用列标题来指示沿外部行和列维度的值。如果你要在这样的情节中打破界限,列标题会全部混淆,所以我很确定这永远不会直接起作用。

即便如此,您也可以拉出 GridSpace 中的各个项目并将它们放入 HoloViews 布局(允许换行),只要您重新标记每个图,以便您知道沿物种维度的值:

import seaborn as sns, hvplot.pandas, holoviews as hv

iris = sns.load_dataset('iris')
plot = iris.hvplot.scatter(x="sepal_length", y="sepal_width", col="species")
p2   = hv.Layout([i.relabel(n).opts() for n,i in plot.items()]).cols(2)
hvplot.show(p2)

截屏

于 2020-01-08T00:50:19.303 回答