2014-06-30 59 views
5

在IPython筆記本中有令人驚歎的mpld3用於交互式matplotlib圖。 mpld3還具有插件功能。其中一個對我來說特別有趣:你可以在圖中選擇一個點並拖動它 - 它在這裏展示:拖動後獲取點信息

http://mpld3.github.io/examples/drag_points.html

鏈接中的源代碼生成下面的圖。 我想從插入我已經把我的觀點拖回來的信息。但是我真的迷失在javascript部分,我怎麼能從中獲得信息。

Here I have dragged some points to new positions. I would like to get the information where to I have dragged them.

回答

3

我想知道這件事,希望做類似的事情。這是我發現的。首先,我想知道鼠標座標是。爲了能夠閱讀的座標,我插入下面的「警告」聲明,類似於「打印」,在drag_points.py:

var startx = 0; 
    var starty = 0; 
    function dragstarted(d) { 
     d3.event.sourceEvent.stopPropagation(); 
     d3.select(this).classed("dragging", true); 
     startx = obj.ax.x(d[0]); 
     starty = obj.ax.y(d[1]); 
    } 
    var endx = 0; 
    var endy = 0; 
    function dragended(d) { 
     d3.select(this).classed("dragging", false); 
     endx = obj.ax.x(d[0]); 
     endy = obj.ax.y(d[1]); 
     alert(endx-startx); 
     d3.select("input") 
      .attr("value",endx-startx) 
    } 

當鼠標點擊和釋放,它打開與x警報診斷行駛距離。這允許訪問座標信息。

接下來,我測試了我是否可以將此座標信息動態編碼爲底層html,從而允許進一步後端處理。我瞭解到d3.js允許你修改html標籤的內容。因此,我修改_display.py(在同一目錄「plugins.py」發現「神社模板」具體來說,我輸入了以下到模板:

<table width=300 height=200 border=5> 
<tr> 
    <form method="POST" action="/plot" class=""> 
    <input type="submit" name="submit" value="PLOT"> 
    </form> 
</tr> 
</table> 

並修改了「drag_points.py」使得而不是打開一個警告框,它修改了「輸入」值的值從「後」,以endx-startx的,也就是說,

 d3.select("input") 
      .attr("value",endx-startx) 

最終的結果是,當球被拖動並釋放,警告框顯示x位移,這個值用於更新「輸入」按鈕的值,如果除輸入按鈕以外的其他標籤用於設置該值,應該可以將u向下遊傾斜信息。

+0

請問您能否解釋如何移動將警報生成的值讀回python輸入?我認爲這是你在提供的代碼的最後一點解釋,但我錯過了一些東西...... – Docuemada

+1

如果這不明確,我很抱歉。回顧一下我做了什麼:1.在包含一些標籤的html中顯示mpld3圖(例如上面例子中的標籤,順便說一句,可以使用font-style =「display:none」隱藏); 2.在圖中移動點; 3.在JavaScript裏面,讀取座標,然後用d3.js更新標籤值;最後,當你按下「提交」按鈕時,信息將被髮送回使用python腳本解碼座標信息的服務器。我希望這有幫助。 – sjp14051