使用 holoviews/hvplot 创建绘图网格并设置最大列数

Create a grid of plots with holoviews/hvplot and set the max number of columns

我想使用 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)

上面的代码根据鸢尾花数据集的物种部分创建了几个图,结果如下图所示:

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

任何建议都会有所帮助。

上述调用返回的 HoloViews object 是一个 GridSpace,它使用列 headers 来指示沿外部行和列维度的值。如果你要在这样的情节中打破这条线,headers 列就会混淆,所以我很确定这永远不会直接起作用。

即使如此,您也可以拉出 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)

对于你的情况,我不会创建 Gridspace (by using keyword 'row' and 'col') but a Layout
当您有布局时,您可以使用 .cols(2).

轻松调整列数

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

请看下面的代码:

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


结果图: