python - 为什么我从 HoloViews 保存的 Datashader 绘图的分辨率这么低?

标签 python bokeh holoviews

我正在尝试将使用 Bokeh 后端通过全息 View 生成的绘图保存为 png。为此,我使用以下代码

import holoviews as hv
from holoviews.operation.datashader import datashade

curve: hv.Curve = hv.Curve(__some_data_for_curve__)
hv.save(datashade(curve), output_path, backend=bokeh)

不幸的是,保存的 png 未正确渲染:

Unfinished Rendered Plot

当我使用时

import panel as pn
import holoviews as hv
from holoviews.operation.datashader import datashade

curve: hv.Curve = hv.Curve(__some_data_for_curve__)
pn.serve(datashade(curve))

我得到了一个渲染良好的情节:

Finished Rendered Plot

这导致假设 datashader 在将绘图保存到文件时无法正确渲染图像。有人知道如何让 datashader 在保存之前完成渲染吗?

最佳答案

关于一个微妙问题的好问题。

发生的事情是hv.save在任何后续 Hook 或流生效之前导出 HoloViews 对象的“初始”渲染。初始渲染包括一个 RGB 图像,该图像是 HoloViews 调用 Datashader 的结果,初始高度和宽度值由 datashade 的参数确定。调用(默认为 height=400width=400)。当您以交互方式查看绘图时,初始调用很快就会更新,并在屏幕上布局时被绘图中使用的实际帧的大小覆盖。由于您的屏幕通常比 400x400 大得多,因此除非保存文件,否则您通常不会看到低分辨率版本。

另一个问题是默认高度和宽度被故意设置为相对较低的值,以免在大多数用户永远不会看到的绘图上浪费太多时间。

如果您希望初始保存使用更高的分辨率,您可以将参数添加到 datashade使用特定值进行调用,如 height=400, width=1024或者您可以使用 pixel_ratio=4 告诉它“放大 4 倍” .

如果您始终想要高分辨率导出,您还可以在脚本或笔记本开始时全局设置这些参数:

from holoviews.operation.datashader import ResamplingOperation
ResamplingOperation.width=1000
ResamplingOperation.height=1000
ResamplingOperation.pixel_ratio=2

或者,如果您总是想要更高的分辨率,您可以将这些设置放入您的 ~/.config/holoviews/holoviews.rc 中文件。

关于python - 为什么我从 HoloViews 保存的 Datashader 绘图的分辨率这么低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74140828/

相关文章:

python - 我怎样才能更好地处理这个 Flask-SQLAlchemy 提交/回滚?

python - 在 map Bokeh 上执行面积图时,它显示空白框并且不起作用

python - 使用 Pandas 数据框绘制 Holoviews.Image

python - 查看与可查看并显示小部件

python - 为什么我在 C 中有一个 "segmentation fault"而在 Python 中没有内存泄漏?

python - 转义 Python 字符串中的特殊字符

python - Bokeh 图像绘图的较小范围填充

Python有任何用于日期时间序列的简单直方图的绘图服务解决方案吗? Bokeh 或其他

matplotlib - 如何在 HoloViews 的不同后端中实现一致的外观?

创建包含其他对象的对象列表时出现的 Python 基本问题