【问题标题】:Plotting local images within Bokeh serve application在 Bokeh 服务应用程序中绘制本地图像
【发布时间】:2018-10-31 23:50:52
【问题描述】:

我正在尝试使用本地存储在应用程序 ./static 目录中的 ImageURL 类绘制 png 图像。在下面的代码中,当使用同一图像的 web url 时,它可以按预期工作,但是创建本地 url 的所有尝试都失败了。此外,当运行基本相同的代码、输出到文件时,所有 url 案例都能正常工作。

散景服务 --show

import os
import numpy as np
from bokeh.plotting import curdoc
from bokeh.models import ColumnDataSource, Range1d, Plot
from bokeh.models.glyphs import ImageURL

url= "http://pngimg.com/uploads/palm_tree/palm_tree_PNG2504.png", # works
# url= "static/palm.png", # 404 GET /static/palm.png
# url=os.path.join(os.path.dirname(__file__), 'palm.png'), # 404 GET /Volumes/Home/Code/scratch/palm.png
# url='file://'+os.path.join(os.path.dirname(__file__), 'static', 'palm.png'),
N = 1
source = ColumnDataSource(dict(
    url = [url]*N,
    x1  = np.linspace(  1, 1, N),
    y1  = np.linspace(  1, 1, N),
    w1  = np.linspace( 253,  253, N),
    h1  = np.linspace( 409,  409, N),
))
p = Plot(
    title=None, 
    x_range=Range1d(start=0, end=500), 
    y_range=Range1d(start=0, end=500), 
    plot_width=500, 
    plot_height=500,
    h_symmetry=False, 
    v_symmetry=False, 
    min_border=0, 
    toolbar_location=None
)
p.add_glyph(source, ImageURL(url="url", x="x1", y="y1", w="w1", h="h1", anchor="bottom_left"))
curdoc().add_root(p)

python main.py

from bokeh.plotting import show, output_file
output_file("tbe.html")

import os
import numpy as np
from bokeh.plotting import curdoc
from bokeh.models import ColumnDataSource, Range1d, Plot
from bokeh.models.glyphs import ImageURL
# all work
url = "http://pngimg.com/uploads/palm_tree/palm_tree_PNG2504.png", 
url = "static/palm.png",
url = os.path.join(os.path.dirname(__file__), 'static', 'palm.png'),
url ='file://'+os.path.join(os.path.dirname(__file__), 'static', 'palm.png'),
N = 1
source = ColumnDataSource(dict(
    url = [url]*N,
    x1  = np.linspace(  1, 1, N),
    y1  = np.linspace(  1, 1, N),
    w1  = np.linspace( 253,  253, N),
    h1  = np.linspace( 409,  409, N),
))
p = Plot(
    title=None, 
    x_range=Range1d(start=0, end=500), 
    y_range=Range1d(start=0, end=500), 
    plot_width=500, 
    plot_height=500,
    h_symmetry=False, 
    v_symmetry=False, 
    min_border=0, 
    toolbar_location=None
)
p.add_glyph(source, ImageURL(url="url", x="x1", y="y1", w="w1", h="h1", anchor="bottom_left"))
show(p)

【问题讨论】:

  • 检查这个命令抛出错误url = os.path.join(os.path.dirname(__file__), 'static', 'palm.png') as NameError: name '__file__' is not defined 你也下载了本地图像吗?如果是,那么__file__ 应该是它的目录。检查一次。 @papahabla
  • @papahabla:你找到解决方案了吗?我也面临同样的问题......不幸的是,桑迪普的评论没有帮助。

标签: python bokeh


【解决方案1】:

按照this answer 中的建议,您必须从脚本上方的目录开始bokeh serve(这意味着您必须将脚本重命名为main.py)。然后你可以使用:

url = os.path.join(os.path.basename(os.path.dirname(__file__)), "static", "palm.png")

例如:

your_folder/
  +main.py
  +static/
    +palm.png

bokeh serve your_folder --show 启动散景。生成的图像可达地址将是http://localhost:5006/your_folder/static/palm.png

【讨论】:

  • 我刚刚在 Bokeh 2.3.2 上尝试了这个答案,并且 png 必须在 static 目录中。如果目录被命名为其他名称,我无法加载它们。
猜你喜欢
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2018-10-19
  • 2013-08-09
  • 1970-01-01
相关资源
最近更新 更多