Python 利用HoverTool在Bokeh中嵌入具有相对路径的局部图像
我正在尝试创建一个绘图,当您将鼠标悬停在图示符上时,它会显示一个类似文档中的图像: 如果我提供包含绝对路径的pandas dataframe series/DataSourceColumnPython 利用HoverTool在Bokeh中嵌入具有相对路径的局部图像,python,plot,bokeh,Python,Plot,Bokeh,我正在尝试创建一个绘图,当您将鼠标悬停在图示符上时,它会显示一个类似文档中的图像: 如果我提供包含绝对路径的pandas dataframe series/DataSourceColumn@images,则在使用show运行时,代码可以正常工作,但如果我提供当前工作目录的相对路径(来自_cwd/filename.png的子文件夹),则在使用show时,图像不会显示。我的目标是制作一个包含数据的可移植html文件,但似乎绝对路径saveoutput\u saveto html函数没有嵌入图像,因此
@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你能在你的回答中对这个评论进行扩展,以给出一个明确的最小工作示例吗?我相信这就是到达这里的用户想要看到的答案:)