Python 将matplotlib转换为交互式全息视图+;datashader可视化(最好使用交互式笔刷)

Python 将matplotlib转换为交互式全息视图+;datashader可视化(最好使用交互式笔刷),python,time-series,seaborn,datashader,hvplot,Python,Time Series,Seaborn,Datashader,Hvplot,如何将以下绘图移植到hvplot+datashader? 理想情况下,可以保留交互性,并且可以交互地选择某些设备id。(理想情况下,使用画笔,即在选择异常点时,我希望能够过滤到基础系列,但如果这不起作用,可能从列表中再选择它们也可以。请记住,此列表可能相当长(在1000个元素的区域内)) 到目前为止,我只能做到: import pandas as pd import datashader as ds import numpy as np import holoviews as hv from

如何将以下绘图移植到hvplot+datashader?

理想情况下,可以保留交互性,并且可以交互地选择某些设备id。(理想情况下,使用画笔,即在选择异常点时,我希望能够过滤到基础系列,但如果这不起作用,可能从列表中再选择它们也可以。请记住,此列表可能相当长(在1000个元素的区域内))

到目前为止,我只能做到:

import pandas as pd
import datashader as ds
import numpy as np
import holoviews as hv

from holoviews import opts

from holoviews.operation.datashader import datashade, shade, dynspread, rasterize
from holoviews.operation import decimate

hv.extension('bokeh','matplotlib')

width = 1200
height = 400
curve = hv.Curve(d)

datashade(curve, cmap=["blue"], width=width, height=height).opts(width=width, height=height)


理想情况下,我可以突出显示与matplotlib类似的某些范围:
axvspan

只要您想要高达100000点左右,就不需要数据阴影:

将熊猫作为pd导入
导入hvplot.pandas
从导入时间戳
df=pd.DataFrame(
{'metrik_0':{
时间戳('2020-01-01 00:00:00'):-0.5161200349325471,
时间戳('2020-01-01 01:00:00'):0.6404118012330947,
时间戳('2020-01-01 02:00:00'):-1.0127867504877557,
时间戳('2020-01-01 03:00:00'):0.25828987625529976,
时间戳('2020-01-01 04:00:00'):-2.4867780840076,
时间戳('2020-01-01 05:00:00'):-0.30695039872663826,
时间戳('2020-01-01 06:00:00'):-0.6570670310316116,
时间戳('2020-01-01 07:00:00'):0.3274964731894147,
时间戳('2020-01-01 08:00:00'):-0.862411311084097,
时间戳('2020-01-01 09:00:00'):1.0832911260447902},
“设备id”:{
时间戳('2020-01-01 00:00:00'):9,
时间戳('2020-01-01 01:00:00'):1,
时间戳('2020-01-01 02:00:00'):1,
时间戳('2020-01-01 03:00:00'):9,
时间戳('2020-01-01 04:00:00'):9,
时间戳('2020-01-01 05:00:00'):9,
时间戳('2020-01-01 06:00:00'):9,
时间戳('2020-01-01 07:00:00'):1,
时间戳('2020-01-01 08:00:00'):1,
时间戳('2020-01-01 09:00:00'):9})
df.hvplot(通过class='device\u id')

如果需要vspan,可以从HoloView获得:

将全息视图导入为hv
vspan=hv.vspan(时间戳('2020-01-01 04:00:00'),
时间戳('2020-01-01 06:00:00'))
df.hvplot(by='device_id')*vspan.opts(color='red')

如果您确实需要Datashader,您可以使用它,但如果不进一步操作,结果将无法选择:

df.hvplot(by='device_id',datashade=True,dynspread=True)*vspan.opts(color='red')

您试过hvPlot吗?您应该能够执行
导入hvplot.pandas
操作,然后在使用
.plot
的地方使用
.hvplot
。如果说“1000个元素”是指数据点,那么就不需要Datashader;博克支持的hvPlot应该会高兴到100000分左右。如果不使用Datashader,选择点会更容易,因此如果不需要,我会避免使用它…不,我是指我要再选择的单个类别。时间序列的元素(=点,观察值)更多。尝试使用您的建议时:
警告:param.main:hvPlot没有轴的概念,ax关键字将被忽略。使用*运算符组合打印以覆盖打印,或使用+运算符将打印并排排列。
;删除ax时,只会创建一个空数字。该消息建议使用类似于
hv.Overlay([df.plot(y='metrik_0',label=dev)的方法进行dev,df in d.groupby('device_id'))]
,尽管我没有在这里测试它。基本上,让一个绘图工作,然后使用Overlay组合绘图。或者在这种情况下(再次未测试)可能类似于
df.plot.line(y='metrik_0',by='deviceid')
的东西也会起作用;可能需要一些调整。我已经显式地子选择了数据点,使其最多有200k个点,最多有1000个类别(这里称为设备id)。我如何启用笔刷来选择数据点?如果我有一个完整的注释列表,我如何添加这些注释?我可以确认,当仅使用bokeh进行绘图时,平移绘图/并以交互方式探索绘图失败,即我担心已经有太多的点。到目前为止,类别的子选择似乎只在lis中起作用t、 也可以使用画笔吗?所有类别的画笔总数为100K,因此是的,这对于datashader来说是一个很好的例子。例如,您可以使用hv.Labels元素在许多位置放置文本。有关使用画笔的信息,请参阅。
import pandas as pd
import datashader as ds
import numpy as np
import holoviews as hv

from holoviews import opts

from holoviews.operation.datashader import datashade, shade, dynspread, rasterize
from holoviews.operation import decimate

hv.extension('bokeh','matplotlib')

width = 1200
height = 400
curve = hv.Curve(d)

datashade(curve, cmap=["blue"], width=width, height=height).opts(width=width, height=height)