【问题标题】:How do I get data from selected points in an offline plotly python jupyter notebook?如何从离线 plotly python jupyter notebook 中的选定点获取数据?
【发布时间】:2018-11-01 14:37:32
【问题描述】:

示例代码:

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot

import plotly.graph_objs as go

import numpy as np

N = 30
random_x = np.random.randn(N)
random_y = np.random.randn(N)

# Create a trace
trace = go.Scatter(
    x = random_x,
    y = random_y,
    mode = 'markers'
)

data = [trace]

# Plot and embed in ipython notebook!
iplot(data, filename='basic-scatter')

[]

如何获取 x,y 数据或所选索引的副本?

【问题讨论】:

  • 事件目前仅支持 javascript,javascript 解决方案好吗?您需要将其嵌入到 jupyter notebook 中
  • 如何嵌入 javascrpt?我知道我可以 IPython.notebook.kernel.execute(...) 一旦我在 javascript 中运行。
  • 您的问题解决了吗?

标签: python jupyter-notebook plotly


【解决方案1】:

因此,如果您想在 Jupyter 笔记本中使用 javascript,您有两种选择。

在jupyter notebook中使用display(HTML())方法渲染html,下面的示例代码演示了这个方法!

另一种方法是使用IPython Magic,阅读更多here,代码会变成这样。

%%html
%html [--isolated] 将单元格渲染为 HTML 块

可选参数: --isolated 将单元格注释为“孤立”。孤立的单元格在自己的标签内呈现

%%html
<span> naren</span>

您也可以使用上述方法来呈现 HTML。

请检查下面的代码,我从plotly javascript events docs 中获取了select event 的代码,并使其适用于jupyter!

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go
from plotly import tools
import pandas as pd
import numpy as np
from datetime import datetime
init_notebook_mode(connected=True)
from IPython.core.display import display, HTML


N = 30
random_x = np.random.randn(N)
random_y = np.random.randn(N)

# Create a trace
trace = go.Scatter(
    x = random_x,
    y = random_y,
    mode = 'markers'
)

data = [trace]

# Plot and embed in ipython notebook!
plot = plot(data, filename='basic-scatter', include_plotlyjs=False, output_type='div')
divId=plot.split("id=\"",1)[1].split('"',1)[0]
plot = plot.replace("Plotly.newPlot", "var graph = Plotly.newPlot")
plot = plot.replace("</script>", """
var graph = document.getElementById('"""+divId+"""');
var color1 = '#7b3294';
var color1Light = '#c2a5cf';
var colorX = '#ffa7b5';
var colorY = '#fdae61';
;graph.on('plotly_selected', function(eventData) {
  var x = [];
  var y = [];

  var colors = [];
  for(var i = 0; i < N; i++) colors.push(color1Light);

  eventData.points.forEach(function(pt) {
    x.push(pt.x);
    y.push(pt.y);
    colors[pt.pointNumber] = color1;
  });


  Plotly.restyle(graph, 'marker.color', [colors], [0]);
});
""")
display(HTML(plot))

【讨论】:

  • @Nizam 不客气!谢谢你:)
  • 我将上面的代码复制粘贴到一个空笔记本上,但它不工作(没有显示)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2017-05-27
  • 2017-02-18
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多