我有一个散点图,想突出显示x轴的某些范围。当要突出显示的数字范围相对较小时,使用BoxAnnotation
效果很好。但是,我正在尝试制作许多相邻的突出显示(具有不同的不透明度)。缩小许多相邻的BoxAnnotations
时,框会稍微重叠,从而形成线条。此外,成千上万的{{1}}需要很长时间才能生成,并且在与图进行交互时运行不流畅。
为了更具体地说明我的情况,我有一些时间数据和一个预测模型,用于检测数据中某些事件的发生概率。我希望每个片段都以不透明性突出显示,该不透明性由事件在该时间点发生的概率给出。但是,我目前的BoxAnnotations
方法在缩小时会导致框重叠产生虚假线条(在放大区域时会消失),并且导致交互式绘图的响应速度变慢。
是否有一种方法可以在没有伪像的情况下并通过更流畅的体验来完成类似的任务?
当前方法:
BoxAnnotation
在source = ColumnDataSource(data=data_frame)
figure_ = figure(x_axis_label='Time', y_axis_label='Intensity')
for index in range(data_frame.shape[0] - 1):
figure_.add_layout(
BoxAnnotation(left=data_frame['time'].values[index], right=data_frame['time'].values[index + 1],
fill_alpha=data_frame['prediction'].values[index], fill_color='red', line_alpha=0)
)
figure_.circle(x='time', y='intensity', source=source)
show(figure_)
附近有很多小相邻的人造线的示例:
答案 0 :(得分:1)
可能没有任何方法可以挽救这种确切的方法。这些工件是由于基础栅格HTML画布的功能所致,在这方面没有什么可以作为。并且任何缓慢都是由于以下事实造成的:BoxAnnotation
的这种使用(具有非常多的单个实例)根本不是预想的,它也没有进行优化以显示数百个实例,例如:分散字形是。由于上述原因,您正在尝试使用框注解来构建某种半透明的热图,但这并不适合。
您可以通过使用单个rect
或vbar
字形以向量化方式一次绘制所有框的方式来克服速度慢的问题。但这不会减轻合成问题。
您最好的选择是创建一个半透明的“热图”图像,并使用可以更好地控制光栅化和合成细节的工具或代码覆盖自己。我真的无法为您提供详细的建议。 Datashader库可能对此有用。