如何从Bokeh Point Draw Tool中生成数据 - 生成的html表用于python

问题描述 投票:0回答:1

经过很多麻烦,我终于能够让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)
python html bokeh
1个回答
0
投票

我最后编写了下面的函数来从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 
© www.soinside.com 2019 - 2024. All rights reserved.