Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 利用HoverTool在Bokeh中嵌入具有相对路径的局部图像_Python_Plot_Bokeh - Fatal编程技术网

Python 利用HoverTool在Bokeh中嵌入具有相对路径的局部图像

Python 利用HoverTool在Bokeh中嵌入具有相对路径的局部图像,python,plot,bokeh,Python,Plot,Bokeh,我正在尝试创建一个绘图,当您将鼠标悬停在图示符上时,它会显示一个类似文档中的图像: 如果我提供包含绝对路径的pandas dataframe series/DataSourceColumn@images,则在使用show运行时,代码可以正常工作,但如果我提供当前工作目录的相对路径(来自_cwd/filename.png的子文件夹),则在使用show时,图像不会显示。我的目标是制作一个包含数据的可移植html文件,但似乎绝对路径saveoutput\u saveto html函数没有嵌入图像,因此

我正在尝试创建一个绘图,当您将鼠标悬停在图示符上时,它会显示一个类似文档中的图像:

如果我提供包含绝对路径的pandas dataframe series/DataSourceColumn
@images
,则在使用
show
运行时,代码可以正常工作,但如果我提供当前工作目录的相对路径(来自_cwd/filename.png的子文件夹),则在使用
show
时,图像不会显示。我的目标是制作一个包含数据的可移植html文件,但似乎绝对路径
save
output\u save
to html函数没有嵌入图像,因此我需要使用相对路径

我试过:

  • 在文件夹路径中包括当前工作目录名
  • 文件://@images
    更改为
    @images
但我不知道还能尝试什么

谢谢你的帮助

def make_bokeh_绘图(数据框,标题):
def样式(p):
p、 title.align='center'
p、 title.text\u font\u size='18pt'
p、 xaxis.axis\标签\文本\字体\大小='12pt'
p、 xaxis.major_标签_文本_字体_大小='12pt'
p、 yaxis.axis\标签\文本\字体\大小='12pt'
p、 yaxis.major\u标签\文本\字体\大小='12pt'
返回p
#制作直方图,保持图像路径不变
arr_df,频率,边缘=生成直方图_df(dataframe.score.values,bin=100)
#按histrogram索引箱列出路径索引
img_路径_系列=生成img_路径_系列(边缘、数据帧)
#将其与arr_df合并
arr_df[“图像”]=img_路径_系列
打印(arr_df[“图像”].head())
#使df成为一种博克人友好的格式
arr_src=列数据源(arr_df)
#设置与之前相同的图形
p=图形(绘图宽度=500,绘图高度=500,标题=标题,
x_范围=(0,1),
x轴标签='分数',y轴标签='计数')
#这次添加一个带有源的四字形
p、 四元组(底部=0,顶部=计数,左=左,右=右,源=arr_src,
填充(颜色为红色,线条为黑色)
#将样式添加到绘图中
styled_p=样式(p)
#添加一个指向格式化列的悬停工具
悬停=悬停工具(工具提示=[('Delay','@f_interval'),
(‘Count’,‘f_Count’),
('Image','@images'))
#src=“file://@images”height=“200”alt=“@imgs”width=“200”
#文件://
悬停=悬停工具(工具提示=”“”
@f_计数@f_间隔
($x,$y)
""")
#将悬停工具添加到图形中
样式化的添加工具(悬停)
表演(p)
返回p

通过
bokeh-service--show script.py运行服务器时,即使使用绝对路径,图像也不会显示。类似地,在作为服务器运行相对路径时,我尝试了各种编写相对路径的方法

这行不通。浏览器不会从通过HTTP加载的页面加载
文件://
URL。为了实现这一点,图像文件必须从真正的web服务器提供,并通过
http://
URL加载。

我刚刚遇到了同样的问题。对我来说,有效的方法是使用相对路径(图像文件与生成的HTML位于同一目录中,因此我只提供文件名)并将
src=“file://@images”
替换为
src=“@images”

我明白了,谢谢,这就是为什么它只在使用
show
而不是作为Web服务器运行时才有效。那么,您知道Bokeh惯用的托管本地图像进行交互式绘图的方式是什么吗?如果要在Bokeh外部创建一个web服务器,这没关系,尽管我有点惊讶。如果你制作一个带有
静态
子目录的“目录格式”应用程序,Bokeh将自动在
/static
下提供服务。否则,Bokeh是一个Tornado应用程序,您可以“手动”(以编程方式)启动它,并添加您想要的任何其他自定义Tornado请求处理程序。令人惊讶的是,它工作得很好!我花了很长时间试图找出问题所在(因为我已经尝试将其作为一个应用程序使用,带有子文件夹),但我没有意识到文件夹必须称为“静态”,谢谢@bigreddot你能在你的回答中对这个评论进行扩展,以给出一个明确的最小工作示例吗?我相信这就是到达这里的用户想要看到的答案:)