Holoviews 图表在组合和输出时共享轴

Ame*_*_90 7 python holoviews holoviz

我正在使用 Holoviews 构建图表仪表板。其中一些图表在 y 轴上有百分比,而其他图表有总和/计数等。当我尝试将我创建的所有图表输出到 html 文件时,所有图表都会更改它们的 y 轴以匹配第一个图表的轴我的图表列表。

例如:

  • 图表 1 是一个总和,值从 0 到 1000
  • 图 2 是 %
  • 图 3 是 %

当我使用以下方法在全息视图中组合这些图表时:

  • 图表 = 图表 1 + 图表 2 + 图表 3

图 2 和图 3 的 y 轴与图 1 相同。

有谁知道为什么会发生这种情况以及我如何解决它,以便所有图表保持其各自的轴与它们试图表示的内容相关。

谢谢!

San*_*ord 6

当 y 轴具有相同名称时会发生这种情况。如果您希望每个图都获得自己独立的 x 轴和 y 轴,则
需要使用选项 axiswise=True

在holoviews FAQ中有一个对axiswise的简短参考:
https ://www.holoviews.org/FAQ.html

这是我检查过并有效的代码示例

# import libraries etc.
import numpy as np
import pandas as pd
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')

# create some sample data
df1 = pd.DataFrame({
    'x': np.random.rand(10), 
    'y': np.random.rand(10),
})

df2 = pd.DataFrame({
    'x': np.random.rand(10) * 10, 
    'y': np.random.rand(10) * 10,
})

# set axiswise=True so that every plot gets its own independent x- and y-axis    
plot1 = hv.Scatter(df1).opts(axiswise=True)
plot2 = hv.Scatter(df2).opts(axiswise=True)

plot1 + plot2
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

plot1 = hv.Scatter(df1)
plot2 = hv.Scatter(df2)

(plot1 + plot2).opts(opts.Scatter(axiswise=True))
Run Code Online (Sandbox Code Playgroud)


如果在您尝试我的代码示例时这不起作用您可能需要升级到最新版本的全息视图。这可以按如下方式完成:
安装最新的 git 版本的 Holoviews、hvplot、panel、datashader 和 param

  • 但说实话,我自己宁愿你使用: import hvplot.pandas; 然后: (df1.hvplot.scatter(x='x', y='y') + df2.hvplot.scatter(x='x', y='y')).opts(opts.Scatter(axiswise =True)) 所以你使用 .hvplot() 而不是 .plot() ,这基本上就是你在将绘图后端设置为 Holoviews 时所做的事情。你真的应该检查一下:https://hvplot.holoviz.org/ Hvplot 是真正被使用的。 (2认同)