holoviews散点图的回归线?

5

我正在使用 xarray 数据集创建散点图

scat = ds.hvplot.scatter(x='a', y='b', groupby='c', height=900, width=900)

如何在这个图中添加回归线?

同时,我也在使用这个方法设置一些图表属性,我可以在回调函数中添加斜率,但我无法找到从plot.state中访问x和y的方法。这可能完全是错误的方法。

scat = scat.opts(hooks=[hook])

def hook(plot, element):
    print('plot.state:   ', plot.state)
    print('plot.handles: ', sorted(plot.handles.keys()))

    par = np.polyfit(x, y, 1, full=True)
    gradient=par[0][0]
    y_intercept=par[0][1]

    slope = Slope(gradient=gradient, y_intercept=y_intercept,
          line_color='orange', line_dash='dashed', line_width=3.5)

    plot.state.add_layout(slope)

scat = scat.opts(hooks=[hook])
2个回答

6

HoloViews >= 1.13现在支持向您的绘图中添加回归线,因此您不再需要使用 hooks。

1) 您可以通过指定关键字斜率和 y_截距自行添加回归线:

gradient = 2
y_intercept = 15

# create random data
xpts = np.arange(0, 20)
ypts = gradient * xpts + y_intercept + np.random.normal(0, 4, 20)

scatter = hv.Scatter((xpts, ypts))

# create slope with hv.Slope()
slope = hv.Slope(gradient, y_intercept)

scatter.opts(size=10) * slope.opts(color='red', line_width=6)


2) 或者,您可以使用 hv.Slope.from_scatter() 让 HoloViews 为您计算:

normal = hv.Scatter(np.random.randn(20, 2))

normal.opts(size=10) * hv.Slope.from_scatter(normal)


生成的图表:

带有回归线的散点图 holoviews 1.13


1
我在文档中没有看到,但这是一个均方根(线性)回归吗?这里还有其他选项吗?这是hv的一个很好的补充。 - Tyler Russell

3

plot hooks有两个参数,第二个参数是正在显示的元素。由于元素包含正在显示的数据,我们可以编写一个回调函数来使用dimension_values方法获取数据中'a'和'b'维度的值来计算斜率。此外,为了避免添加多次Slope图形,我们可以将其缓存在图形上并更新其属性:

def hook(plot, element):
    x, y = element.dimension_values('a'), element.dimension_values('b')
    par = np.polyfit(x, y, 1, full=True)
    gradient=par[0][0]
    y_intercept=par[0][1]

    if 'slope' in plot.handles:
        slope = plot.handles['slope']
        slope.gradient = gradient
        slope.y_intercept = y_intercept
    else:

        slope = Slope(gradient=gradient, y_intercept=y_intercept,
              line_color='orange', line_dash='dashed', line_width=3.5)
        plot.handles['slope'] = slope
        plot.state.add_layout(slope)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接