我正在尝试将使用 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 未正确渲染:
当我使用时
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))
我得到了一个渲染良好的情节:
这导致假设 datashader 在将绘图保存到文件时无法正确渲染图像。有人知道如何让 datashader 在保存之前完成渲染吗?
最佳答案
关于一个微妙问题的好问题。
发生的事情是hv.save
在任何后续 Hook 或流生效之前导出 HoloViews 对象的“初始”渲染。初始渲染包括一个 RGB 图像,该图像是 HoloViews 调用 Datashader 的结果,初始高度和宽度值由 datashade
的参数确定。调用(默认为 height=400
和 width=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/