2017-06-13 12 views
7

नीचे दिए गए कोड का उपयोग करके मैं 4 प्लॉट के साथ 2x2 ग्राफ प्राप्त कर सकता हूं। ब्रश के साथ, मैं कुछ डेटा अंक चुन सकता हूं। मेरे पास सवाल यह है कि चुने गए डेटा पॉइंट्स को JSON सरणी या सीवी के रूप में कैसे प्राप्त किया जाता है। यह कोड mlpd3 का उपयोग करता है, लेकिन बोके ब्रश के साथ समान चयन कर सकता है .. लेकिन डेटा बिंदुओं का चयन करने का कोई उदाहरण नहीं है। मैं पाइथन के साथ प्रसंस्करण जारी रखने के लिए ऑब्जेक्ट के रूप में चयनित डेटा प्राप्त करने का प्रयास कर रहा हूं। सेल में डेटा देखना अच्छा लगेगा।पायथन: एमएलपीडी 3, बोके, प्लॉटली में लिंक किए गए ब्रश से डेटा कैसे प्राप्त करें?

%matplotlib inline 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib as mat 
import mpld3 

mpld3.enable_notebook() 


from mpld3 import plugins 

fig, ax = plt.subplots(2, 2, figsize=(10, 8)) 
fig.subplots_adjust(hspace=0.1, wspace=0.1) 
ax = ax[::-1] 

X = np.random.normal(size=(2, 100)) 
for i in range(2): 
    for j in range(2): 
     ax[i, j].xaxis.set_major_formatter(plt.NullFormatter()) 
     ax[i, j].yaxis.set_major_formatter(plt.NullFormatter()) 
     points = ax[i, j].scatter(X[j], X[i]) 

plugins.connect(fig, plugins.LinkedBrush(points)) 

Bokeh चयन के लिए CustomJS में समान व्यवहार है

http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.html#userguide-interaction-jscallbacks-customjs-interactions

जो भी एक आसान है चयनित आइटम को निकालने के लिए - काम करेगा .. यदि वहाँ एक Plotly समाधान है, वह भी काम करेगा ।

+2

mpld3 में ऐसा करने का कोई तरीका नहीं है: mpld3 का आउटपुट एक स्थिर जावास्क्रिप्ट विज़ुअलाइज़ेशन है जिसमें पाइथन बैकएंड के लिए (या ज्ञान) की आवश्यकता नहीं है। इसी कारण से, फ्रंटेंड और बैकएंड के बीच इस प्रकार के संचार के लिए लाइब्रेरी के लगभग पूर्ण पुनर्लेख की आवश्यकता होगी। मैं बोके का उपयोग करने का सुझाव दूंगा। – jakevdp

+0

@jakevdp धन्यवाद! सवाल बदल रहा है। – Merlin

उत्तर

1

यह IPython के बाहर है, लेकिन आप डेटा अजगर में वापस लाने के लिए d3.js और jquery साथ संयोजन के रूप में flask या django चला सकते हैं।

+0

एफडब्ल्यूआईडब्ल्यू - यह सामान्य दृष्टिकोण है कि डैश लेता है, 'फ्लास्क' का उपयोग पाइथन सर्वर के रूप में, 'Plotly.js' को फ्रंट-एंड ग्राफ़िंग लाइब्रेरी के रूप में, और HTTP अनुरोध पुस्तकालय के रूप में' fetch' 'करता है। –

3

प्लॉटली के नए Dash framework का उपयोग कर आप प्लॉटली चार्ट से चयनित डेटा प्राप्त कर सकते हैं।

वहाँ मैं सिर्फ इतिहास के संरक्षण के लिए नीचे पूर्ण उदाहरण चिपकाया है "ग्राफ़ Crossfiltering" https://plot.ly/dash/getting-started-part-2

के तहत यहाँ डॉक्स में एक उदाहरण है।

नीचे दिए गए प्रत्येक कॉलबैक में, आपके पास चयनित बिंदुओं, उन बिंदुओं तक पहुंच है जिन्हें आपने अभी तक कवर किया है, या जिन बिंदुओं पर आपने अभी क्लिक किया है। यह ऐप बस ऐप में बिंदुओं के मान प्रदर्शित करता है, लेकिन आप अंक के साथ कुछ भी कर सकते हैं (उदाहरण के लिए कुछ और गणना करें)।

example gif of selecting data in a Dash app

import dash 
from dash.dependencies import Input, Output 
import dash_core_components as dcc 
import dash_html_components as html 
import json 

app = dash.Dash(__name__) 

app.layout = html.Div([ 
    dcc.Graph(
     id='basic-interactions', 
     figure={ 
      'data': [ 
       { 
        'x': [1, 2, 3, 4], 
        'y': [4, 1, 3, 5], 
        'text': ['a', 'b', 'c', 'd'], 
        'customdata': ['c.a', 'c.b', 'c.c', 'c.d'], 
        'name': 'Trace 1', 
        'mode': 'markers', 
        'marker': {'size': 12} 
       }, 
       { 
        'x': [1, 2, 3, 4], 
        'y': [9, 4, 1, 4], 
        'text': ['w', 'x', 'y', 'z'], 
        'customdata': ['c.w', 'c.x', 'c.y', 'c.z'], 
        'name': 'Trace 2', 
        'mode': 'markers', 
        'marker': {'size': 12} 
       } 
      ] 
     } 
    ), 

    html.Div([ 
     dcc.Markdown(""" 
      **Hover Data** 

      Mouse over values in the graph. 
     """.replace(' ', '')), 
     html.Pre(id='hover-data') 
    ], style=styles['column']), 

    html.Div([ 
     dcc.Markdown(""" 
      **Click Data** 

      Click on points in the graph. 
     """.replace(' ', '')), 
     html.Pre(id='click-data'), 
    ], style=styles['column']), 

    html.Div([ 
     dcc.Markdown(""" 
      **Selection Data** 

      Choose the lasso or rectangle tool in the graph's menu 
      bar and then select points in the graph. 
     """.replace(' ', '')), 
     html.Pre(id='selected-data'), 
    ]) 
]) 


@app.callback(
    Output('hover-data', 'children'), 
    [Input('basic-interactions', 'hoverData')]) 
def display_hover_data(hoverData): 
    # 
    # This is where you can access the hover data 
    # This function will get called automatically when you hover over points 
    # hoverData will be equal to an object with that data 
    # You can compute something off of this data, and return it to the front-end UI 
    # 


    return json.dumps(hoverData, indent=2) 


@app.callback(
    Output('click-data', 'children'), 
    [Input('basic-interactions', 'clickData')]) 
def display_click_data(clickData): 
    # Similarly for data when you click on a point 
    return json.dumps(clickData, indent=2) 


@app.callback(
    Output('selected-data', 'children'), 
    [Input('basic-interactions', 'selectedData')]) 
def display_selected_data(selectedData): 
    # Similarly for data when you select a region 
    return json.dumps(selectedData, indent=2) 


if __name__ == '__main__': 
    app.run_server(debug=True) 
+0

आप इस कोड को ज्यूपिटर में लिख सकते हैं और सेल द्वारा सेल को निष्पादित कर सकते हैं, लेकिन आखिरकार यह अन्य तरीकों से जुपीटर कर्नेल में नहीं जुड़ा है। यहां जुपीटर में विकसित डैश ऐप का एक उदाहरण दिया गया है: https://plot.ly/~jackp/17610 –

+0

क्या आप कोड को अलग कर सकते हैं जो ऊपर दिए गए प्रश्न का उत्तर ज्यूपिटर नोटबुक के लिए उत्तर देता है और उत्तर में जोड़ता है। ऐसा लगता है कि बहुत सारे कोड की आवश्यकता नहीं है। – Merlin

+0

ज़रूर - मैंने शैली शैली को हटा दिया है। मैंने कुछ टिप्पणियां भी शामिल की हैं जहां आप होवर पर क्लिक करेंगे, क्लिक करें या ईवेंट का चयन करें। –

संबंधित मुद्दे