【问题标题】:Embed simple interactive data visualisation in website (Bokeh? Other platforms?)在网站中嵌入简单的交互式数据可视化(散景?其他平台?)
【发布时间】:2017-12-24 10:21:56
【问题描述】:

我之前使用 Python 构建了很多数据可视化工具,依靠基于桌面的 GUI 工具进行用户交互(例如 Qt),但现在我试图以网站的形式让一些东西更广泛地访问。

但我恐怕我的网络开发经验有限,不知道是否有人可以推荐该项目需要考虑的平台/技术?

我的目标是一个带有下拉菜单的简单网站。当用户从下拉列表中进行选择时,相关数据将从 Web 服务器上的 .txt 文件加载并绘制在网站中。使用缩放工具和指示鼠标位置数据的光标很有价值。

将来我想扩展它以添加更复杂的功能(例如,用户输入框,根据输入执行绘图代码),但现在,实现上述简单案例会很棒。

我在网上找到了关于 Bokeh 的正面 cmets,它看起来不错并且似乎支持 Python 代码。但是,虽然这些示例向我展示了如何绘制单个案例,但我不知道如何在网站中创建一个动态更新绘制数据的下拉菜单。

我的目标是使代码快速,并有可能被众多网络用户访问。如果有比 Bokeh 更好的选择,我非常愿意接受任何建议或想法。

非常感谢

【问题讨论】:

    标签: python web visualization data-visualization bokeh


    【解决方案1】:

    那里有许多可用的工具。您可以考虑以下:


    需要零编码:


    对于开发者:JavaScript 库


    如果您更喜欢 Python,请考虑:


    对于 R:

    【讨论】:

      【解决方案2】:

      据我所知,这正是散景的用途:在网络浏览器中可视化数据并具有轻松的用户交互性。

      这是一个小例子,向您展示使用散景可以做到多么简单:

      假设您有两个包含数据的 csv 文件:

      # a.csv :
      Time;myData
      1;-2,926
      2;-2,892
      3;-2,89
      ...
      
      #b.csv : 
      Datation;myData
      0,000000;18,432;
      10,000000;17,785;
      20,000000;17,242;
      ...
      

      还有一个名为“my_script”的python脚本:

      from bokeh.layouts import row
      from bokeh.plotting import figure
      from bokeh.models.widgets import Dropdown
      from bokeh.models import ColumnDataSource
      from bokeh.io import curdoc
      import pandas as pd
      
      # callback to load file
      def load_file(attr, old, new):
          file = dropdown.value
          print(file)
          df = pd.read_csv(file, sep = ';', header = 0, index_col = 0, decimal = ",")
          print(df)
          source.data = dict(x=df.index.values, y=df['myData'].values)
      
      
      # configuring dropdow widget
      choices = [ ("a.csv", "C:/Test/a.csv"), ("b.csv", "C:/Test/b.csv")]
      dropdown = Dropdown(label="Add condition", menu=choices)
      dropdown.on_change('value', load_file)
      
      # configuring plot
      plot = figure(tools="box_zoom, hover, reset")
      source = ColumnDataSource(dict(x = [], y=[]))
      plot.scatter(x="x", y="y", source=source)
      
      # add widget to bokeh root document
      curdoc().add_root(row(dropdown, plot))
      

      现在你必须启动散景服务器,例如使用命令

      bokeh server --show my_script.py
      

      --show 直接启动网页浏览器到 url http://localhost:5006/stackoverflow

      您还可以通过其他方式将散景 html 代码嵌入到您的 html 代码中。但是,要使用此方法加载文件,您仍然需要运行散景服务器。有一些示例可以直接从网络浏览器上传数据,但这是另一回事

      请不要说我选择用 pandas 加载数据,但还有其他方法。您当然还需要调整代码以使用 pd.read_csv() 中的参数加载数据

      【讨论】:

      • 谢谢,这看起来很棒!现在会尝试然后接受它。作为一个普遍的问题,在我的网络主机上运行 Bokeh 服务器是否适合通过网络进行大规模访问?还是简单的 javascript(/其他东西?)更好?
      • 我不是专家,但根据thisthisthis,我认为散景可用于“大范围”。可能还有其他解决方案,但我不知道。我发现散景的唯一限制是非常大的数据集(> 300k)的缓慢/滞后的用户体验。但是有solutions
      猜你喜欢
      • 2017-06-06
      • 2020-08-01
      • 2013-12-09
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      相关资源
      最近更新 更多