Bokeh - save plot as svg (ValueError: OutputDocumentFor expects a sequence of Models)
Bokeh - save plot as svg (ValueError: OutputDocumentFor expects a sequence of Models)
我在 Bokeh 中绘制了一个图,但是当我尝试将其导出为 svg 文件时,出现以下错误:OutputDocumentFor 需要一系列模型。
我的代码是:
# plot 2D histogram
def plot_hist(ch1, ch2, ch1_name='G3BP1', ch2_name='Nucleocapsid'):
'''Plot a 2D histogram from two channels'''
# get histogram data
df_hist = pd.DataFrame({ch1_name: ch1.ravel(), ch2_name: ch2.ravel()})
df_hist = df_hist.groupby(df_hist.columns.tolist()).size().reset_index(name='count')
df_hist['log count'] = np.log10(df_hist['count'])
# make the plot
return hv.VLine(10).opts(apply_ranges=True, line_width=2, color = 'black', line_dash = 'dashed') * hv.HLine(10).opts(apply_ranges=True, line_width=2, color = 'black', line_dash = 'dashed')*hv.Points(
data=df_hist, kdims=['G3BP1', 'Nucleocapsid'], vdims=['log count'],
).opts(
size=10,
cmap='magma',
color='log count',
colorbar=True,
colorbar_opts={"title": "log₁₀ count"},
frame_height=500,
frame_width=500,
padding=0.05,
xlabel='G3BP1',
ylabel='Nucleocapsid',
fontsize=15,
)
# make ROI mask
roi1_nt = (single_cell_roi_rCh[1] > 0) | (single_cell_roi_gCh[1] > 0)
roi1_nt = skimage.morphology.remove_small_objects(roi1_nt, min_size=3)
hv.renderer('bokeh').theme = 'caliber'
plot=plot_hist(im_r[roi1_nt], im_g[roi1_nt])
from bokeh.io import export_svgs
plot.output_backend = "svg"
export_svgs(plot, filename = "plot.svg")
最终是否有办法使用 Geotiff 将从此图中保存的 png 文件转换为 tiff 文件?
在此先感谢您的帮助。
看起来您正在使用 holoviews
在您的函数 plot_hist()
中创建图形。这不是散景 object
.
请尝试调用 hv.render()
获取底层散景图。
下面的行应该创建一个 svg 文件。
import holoviews as hv
from bokeh.io import export_svgs
plot = plot_hist(im_r[roi1_nt], im_g[roi1_nt])
plot = hv.render(plot)
plot.output_backend = "svg"
export_svgs(plot, filename = "plot.svg")
编辑
正如@bigreddot 提到的,bokeh
也有一个 export_png()
工具。在这种情况下,代码应该如下所示。
import holoviews as hv
from bokeh.io import export_png
plot = plot_hist(im_r[roi1_nt], im_g[roi1_nt])
plot = hv.render(plot)
export_png(plot, filename = "plot.png")
如果您的目标是从“png”生成“tiff”文件,您可以按照此question on SO的解决方案。
from PIL import Image
img = Image.open('plot.png')
img.save('image.tiff')
如果 png 有一个 alpha 值,这可能会带来一些问题。在这种情况下,请检查此 关于在 Pillow 中打开 png。
我在 Bokeh 中绘制了一个图,但是当我尝试将其导出为 svg 文件时,出现以下错误:OutputDocumentFor 需要一系列模型。
我的代码是:
# plot 2D histogram
def plot_hist(ch1, ch2, ch1_name='G3BP1', ch2_name='Nucleocapsid'):
'''Plot a 2D histogram from two channels'''
# get histogram data
df_hist = pd.DataFrame({ch1_name: ch1.ravel(), ch2_name: ch2.ravel()})
df_hist = df_hist.groupby(df_hist.columns.tolist()).size().reset_index(name='count')
df_hist['log count'] = np.log10(df_hist['count'])
# make the plot
return hv.VLine(10).opts(apply_ranges=True, line_width=2, color = 'black', line_dash = 'dashed') * hv.HLine(10).opts(apply_ranges=True, line_width=2, color = 'black', line_dash = 'dashed')*hv.Points(
data=df_hist, kdims=['G3BP1', 'Nucleocapsid'], vdims=['log count'],
).opts(
size=10,
cmap='magma',
color='log count',
colorbar=True,
colorbar_opts={"title": "log₁₀ count"},
frame_height=500,
frame_width=500,
padding=0.05,
xlabel='G3BP1',
ylabel='Nucleocapsid',
fontsize=15,
)
# make ROI mask
roi1_nt = (single_cell_roi_rCh[1] > 0) | (single_cell_roi_gCh[1] > 0)
roi1_nt = skimage.morphology.remove_small_objects(roi1_nt, min_size=3)
hv.renderer('bokeh').theme = 'caliber'
plot=plot_hist(im_r[roi1_nt], im_g[roi1_nt])
from bokeh.io import export_svgs
plot.output_backend = "svg"
export_svgs(plot, filename = "plot.svg")
最终是否有办法使用 Geotiff 将从此图中保存的 png 文件转换为 tiff 文件?
在此先感谢您的帮助。
看起来您正在使用 holoviews
在您的函数 plot_hist()
中创建图形。这不是散景 object
.
请尝试调用 hv.render()
获取底层散景图。
下面的行应该创建一个 svg 文件。
import holoviews as hv
from bokeh.io import export_svgs
plot = plot_hist(im_r[roi1_nt], im_g[roi1_nt])
plot = hv.render(plot)
plot.output_backend = "svg"
export_svgs(plot, filename = "plot.svg")
编辑
正如@bigreddot 提到的,bokeh
也有一个 export_png()
工具。在这种情况下,代码应该如下所示。
import holoviews as hv
from bokeh.io import export_png
plot = plot_hist(im_r[roi1_nt], im_g[roi1_nt])
plot = hv.render(plot)
export_png(plot, filename = "plot.png")
如果您的目标是从“png”生成“tiff”文件,您可以按照此question on SO的解决方案。
from PIL import Image
img = Image.open('plot.png')
img.save('image.tiff')
如果 png 有一个 alpha 值,这可能会带来一些问题。在这种情况下,请检查此