python - 在散景图的轴上突出显示许多范围?
问题描述
我有一个数据散点图,想突出显示 x 轴的某些范围。当要突出显示的数字范围相对较小时,使用BoxAnnotation
效果很好。但是,我正在尝试制作许多相邻的突出显示(具有不同的不透明度)。许多相邻BoxAnnotations
的,缩小的,盒子稍微重叠,形成线条。此外,数千个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_)
解决方案
可能没有任何方法可以挽救这种确切的方法。工件是由于底层光栅 HTML 画布的功能造成的,这里没有任何关于它的东西。并且任何缓慢都是由于这样一个事实,即这种使用BoxAnnotation
(具有如此多的单个实例)根本不是所设想的,而且它根本没有优化以显示数百个实例,例如分散字形的方式。您正在尝试使用框注释来构建一种半透明的热图,由于上述原因,这并不适合它。
您可以通过使用以矢量化方式一次绘制所有框的单个rect
或字形来克服缓慢的问题。vbar
但这不会缓解合成问题。
最好的办法是使用可以更好地控制光栅化和合成细节的工具或代码创建一个半透明的“热图”图像覆盖自己。我真的不能详细地建议你如何做到这一点。Datashader库可能对此有用。
推荐阅读
- iis-10 - 更改时区 IIS10 日志
- python - python表达式的c ++返回类型不清楚
- c - 如何使用 gtk+-3.0 和 C 从图像中创建方形按钮?
- redux - react-router-redux vs connected-react-router for react v4
- r - R:POSIXct 转换失败,尽管设置了本地
- mysql - 在一个表中加入两个用逗号分隔的字符串 id 的表
- java - 删除标题应为菜单项的空间
- android - 尝试从 Activity 访问时,Fragment View 为空
- java - 字符串 replaceAll 不替换 i++;
- javascript - 获取数据属性的 JSON 值,并在特定 DOM 元素中搜索匹配的 Json 键 -> 数据属性