经过很多麻烦,我终于能够让Bokeh的点绘制工具只能解决另一个问题:处理从这个工具生成的数据。下面的代码生成交互式绘图,放置/移动点实时更新表格。但是,我无法弄清楚如何提取此表中的数据,例如,提取到csv文件。我已经尝试过几种策略,例如Excel >> Data >> From Web >> table并使用bs4库但没有运气。我对html一无所知,但在打开使用点绘制工具后生成的html文件时,初始点的数据以及稍后与工具一起出现的点似乎位于不同的位置。这可能是问题的原因。基本上,我只需要将html表中的数据转换为我可以在python中轻松使用的格式。感谢您提供任何帮助。
源代码(python3.6.2)
from datetime import date
import time
from random import randint
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource, PointDrawTool
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn
from bokeh.plotting import figure
output_file("pointDrawResults.html")
data = { "x": [5, 2, 8], "y": [5, 7, 8]}
src = ColumnDataSource(data)
columns = [
TableColumn(field = "x", title = "xs"),
TableColumn(field = "y", title = "ys"),
]
data_table = DataTable(source = src, columns = columns, width = 400, height = 280)
plot = figure(x_range = (0, 10), y_range = (0, 10), width = 400, height = 400, title = "Point Draw Tool")
renderer = plot.circle("x", "y", size = 15, fill_color = "blue", fill_alpha = 0.8, source = src)
draw_tool = PointDrawTool(renderers = [renderer], empty_value = 1)
plot.add_tools(draw_tool)
plot.toolbar.active_drag = draw_tool
show(widgetbox(data_table))
show(plot)
我最后编写了下面的函数来从HTML文件本身中提取从点绘制工具生成的新顶点。对于处于这种困境中的任何其他人的提示,请确保增加所显示表格的大小,以便一次显示所有顶点(无垂直滚动条)。否则,HTML文件中将省略顶点,并且函数不会找到/提取顶点。
import re
def extractHtmlVerts(self):
indexList = []
with open(self.vertexFileE.get(), 'r') as htmlFile:
htmlCont = htmlFile.read()
tokens = re.finditer("(\d+\.\d+)</span>", htmlCont)
type = "x"
for match in tokens:
if type == "x":
indexList.append(round(float(match.group(1))))
type = "y"
else:
type = "x"
return indexList