从Datashader图中选择数据。

3
我正在使用Datashader制作由于我处理的数据量而导致的不同参数的交叉图。我的想法是启用一种交互方式,使用户能够直接从绘图中选择根据数据趋势显示这些异常值的异常值。我想知道Holoviews Selection1D流是否与datashader兼容。
这段代码模拟了我的意思:
import numpy as np
import holoviews as hv
from holoviews import opts
from holoviews import streams
from holoviews.operation.datashader import datashade
hv.extension('bokeh')

# Tools to select data
opts.defaults(opts.Points(tools=['box_select', 'lasso_select']))

# Random points to plot
random_points = hv.Points(np.random.randn(1000))

# Holoviews
selection = streams.Selection1D(source=random_points)

# Selected points by Holoviews selection stream
selected_box = hv.DynamicMap(lambda index: random_points.iloc[index],
                             kdims=[], streams=[selection])

# Final Overlay
Overlay = (random_points * selected_box).opts(padding = 0.01)
Overlay

目前为止还不错,每当我调用 selection 时,我会得到一个由选定点的索引组成的矩阵。但是,在使用 datashade(Overlay) 调用 Datashader 绘图后,随机点和选择框之间的交互就断了,因此我不确定这个流是否与 datashader 兼容或者我使用流的方式是否正确!

这是启发我想法的内容: http://holoviews.org/reference/apps/bokeh/selection_stream.html#bokeh-gallery-selection-stream


新版本将使这个过程变得更加容易,但现在您可以遵循https://examples.pyviz.org/glaciers/glaciers.html中的方法,在任何绘图(datashaded或其他)上选择一个区域,并在其他绘图中反映出来。 - James A. Bednar
有一个很有用的例子可以展示这种可能性。现在我知道从图中提取数据并不是必要的... 我可以使用流(动态映射)来绘制另一个图。 - lsdR94
1个回答

0

这是一个有用的示例,可以看到其中的可能性。现在我知道从图中提取数据并不是必要的...我可以使用动态地图和流,通过边界或1D选择来创建另一个图。


没错,这就是关键思想--你可以在任何图表上选择轴范围,然后通过这些范围过滤任何图表,而无需枚举可能非常多的选定数据点。 - James A. Bednar

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