पायथॉन डी 3 के बराबर। जेएस


110

क्या कोई पायथन लाइब्रेरी की सिफारिश कर सकता है जो इंटरेक्टिव ग्राफ विज़ुअलाइज़ेशन कर सके?

मैं विशेष रूप से d3.js जैसा कुछ चाहता हूं, लेकिन pythonआदर्श रूप में यह 3 डी भी होगा।

मैंने देखा है:

  • NetworkX - यह केवल Matplotlibप्लॉट करता है और जो 2D लगता है। मैंने किसी भी तरह की अंतःक्रियाशीलता नहीं देखी, जैसे कि जो d3.jsदेता है, जैसे कि नोड्स को चारों ओर से खींचना।
  • ग्राफ-टूल - यह केवल 2 डी प्लॉट करता है और इसमें बहुत धीमी गति से इंटरेक्टिव ग्राफ हैं।

1
यदि आप एक ब्राउज़र आधारित संस्करण की तलाश में हैं, तो आप नेटवर्कएक्स में एक ग्राफ उत्पन्न करना चाहते हैं और फिर d3.js में हेरफेर करना चाहते हैं।
क्रिटविटेरिया

@kreativitea ठीक है .... मैं उस ओओ को आदर्श रूप से कैसे करूंगा: ग्राफ़ डेटा (पायथन में एपीआई कॉल के माध्यम से) -> पायथन (मशीन लर्निंग स्टफ्स) -> Django / कुछ + डी 3।js (विज़ुअलाइज़ेशन) - सुंदर चित्र और वेबसाइट :)
एरियोउर वॉन कौयफ

मुझे लगता है कि आप अजगर में वेगा लाइट को लागू कर सकते हैं। इसे देखें और निश्चित रूप से प्लॉट करें।
नोएल हैरिस

जवाबों:


74

आप d3py एक अजगर मॉड्यूल का उपयोग कर सकते हैं जो d3.js स्क्रिप्ट एम्बेड करने वाले xml पृष्ठ उत्पन्न करते हैं। उदाहरण के लिए :

import d3py
import networkx as nx

import logging
logging.basicConfig(level=logging.DEBUG)

G = nx.Graph()
G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(3,2)
G.add_edge(3,4)
G.add_edge(4,2)

# use 'with' if you are writing a script and want to serve this up forever
with d3py.NetworkXFigure(G, width=500, height=500) as p:
    p += d3py.ForceLayout()
    p.show()

मेरे लिए काम किया, लेकिन मुझे लाइनों में से एक को संपादित करना था with d3py.NetworkXFigure(G, width=500, height=500, host="localhost") as p:। मैंने गितुब (SHA: 4e92a90f4003370bc086e0f57b19fca1bd4e8fba)

7
दुर्भाग्य से d3py को किसी भी अधिक सक्रिय रूप से विकसित नहीं किया जा रहा है - विन्सेन्ट आधुनिक समकक्ष (वेगा / d3.js के लिए पायथन इंटरफ़ेस) है, लेकिन नीचे psychemedia का जवाब है (निर्यात नेटवर्क के लिए json तो d3.js में प्रस्तुत करना सबसे साफ हो सकता है।
एक

2
प्रयास करें altair-viz.github.io - d3py और विन्सेन्ट के उत्तराधिकारी। यह भी देखें stackoverflow.com/a/49695472/179014
अस्माइर

43

प्लॉटली इंटरएक्टिव 2D और 3D ग्राफिंग का समर्थन करता है। रेखांकन D3.js साथ गाया जाता है और एक साथ बनाया जा सकता अजगर एपीआई , matplotlib , अजगर के लिए ggplot , Seaborn , prettyplotlib , और पांडा । आप ज़ूम, पैन, टॉगल निशान को चालू और बंद कर सकते हैं, और होवर पर डेटा देख सकते हैं। भूखंडों को HTML, एप्लिकेशन, डैशबोर्ड और IPython नोटबुक में एम्बेड किया जा सकता है। नीचे एक तापमान ग्राफ है जो अन्तरक्रियाशीलता दिखा रहा है। अधिक उदाहरणों के लिए आईपीथॉन नोटबुक ट्यूटोरियल की गैलरी देखें ।

यहां छवि विवरण दर्ज करें



डॉक्स समर्थित साजिश प्रकार और कोड के टुकड़े के उदाहरण प्रदान करता है।



यहां छवि विवरण दर्ज करें

विशेष रूप से आपके प्रश्न के लिए, आप NetworkX से इंटरैक्टिव प्लॉट भी बना सकते हैं ।

यहां छवि विवरण दर्ज करें

पायथन के साथ 3 डी प्लॉटिंग के लिए, आप 3 डी स्कैटर, लाइन और सतह प्लॉट बना सकते हैं जो समान रूप से इंटरैक्टिव हैं। वेबलॉग के साथ प्लॉट दिए गए हैं। उदाहरण के लिए, यूके स्वैप दरों का 3 डी ग्राफ देखें ।



यहां छवि विवरण दर्ज करें

प्रकटीकरण: मैं प्लॉटली टीम पर हूं।


9
स्पष्ट रूप से सवाल का उद्देश्य किनारों से जुड़े नोड्स के अर्थ में रेखांकन है। इस जवाब में बेवजह की अन्य दृश्य क्षमताओं को शामिल किया गया है।
लुट्ज़ बुच

@ mateo-sanchez यह बहुत दुर्भाग्यपूर्ण है कि प्लॉटली ने कॉर्पोरेट ग्राहकों पर ध्यान केंद्रित करने के लिए सभी अकादमिक और व्यक्तिगत सदस्यता समाप्त करने का फैसला किया है
आंद्रेउकियो

20

क्या आपने विन्सेंट को देखा है? विन्सेंट पायथन डेटा ऑब्जेक्ट लेता है और उन्हें वेगा विज़ुअलाइज़ेशन व्याकरण में परिवर्तित करता है। वेगा एक उच्च-स्तरीय दृश्य उपकरण है जो डी 3 के शीर्ष पर बनाया गया है। D3py की तुलना में, विन्सेन्ट रेपो को हाल ही में अपडेट किया गया है। हालांकि उदाहरण सभी स्थिर डी 3 हैं।

और जानकारी:


ग्राफ Ipython में देखे जा सकते हैं, बस इस कोड को जोड़ें

vincent.core.initialize_notebook()

या JSON के लिए आउटपुट जहां आप वेगा ऑनलाइन संपादक ( http://trifacta.github.io/vega/editor/ ) में JSON आउटपुट ग्राफ देख सकते हैं या उन्हें अपने पायथन सर्वर पर स्थानीय रूप से देख सकते हैं। देखने के बारे में अधिक जानकारी ऊपर pypi लिंक में मिल सकती है।

निश्चित नहीं है कि कब, लेकिन पंडों के पैकेज में किसी बिंदु पर डी 3 एकीकरण होना चाहिए। http://pandas.pydata.org/developers.html

बोकेह एक पायथन विज़ुअलाइज़ेशन लाइब्रेरी है जो इंटरैक्टिव विज़ुअलाइज़ेशन का समर्थन करती है। इसका प्राथमिक आउटपुट बैकएंड HTML5 कैनवस है और क्लाइंट / सर्वर मॉडल का उपयोग करता है।

उदाहरण: http://continuumio.github.io/bokehjs/


2
विन्सेन्ट रास्ते में है - ऐसा लगता है कि कुछ प्रतिस्थापन हैं, लेकिन मुझे यकीन नहीं है कि वे ipython से कितनी निकटता से बंधे होंगे ..
naught101

19

एक नुस्खा जो मैंने उपयोग किया है (यहाँ वर्णित है: GEXF में सह-निदेशक नेटवर्क डेटा फाइलें और ओपनकॉर्पोरेट्स डेटा से स्क्रैपरविकी और नेटवर्कएक्स से JSON ) निम्नानुसार चलता है:

  • नेटवर्कएक्स का उपयोग करके एक नेटवर्क प्रतिनिधित्व उत्पन्न करें
  • JSON फ़ाइल के रूप में नेटवर्क निर्यात करें
  • उस JSON को d3.js में आयात करें । ( networkx ट्री और ग्राफ / नेटवर्क अभ्यावेदन दोनों को निर्यात कर सकता है जो d3.js आयात कर सकता है)।

Networkx JSON निर्यातक रूप ले लेता है:

from networkx.readwrite import json_graph
import json
print json.dumps(json_graph.node_link_data(G))

वैकल्पिक रूप से आप नेटवर्क को GEXF XML फ़ाइल के रूप में निर्यात कर सकते हैं और फिर इस प्रतिनिधित्व को sigma.js जावास्क्रिप्ट विज़ुअल लाइब्रेरी में आयात कर सकते हैं।

from xml.etree.cElementTree import tostring
writer=gf.GEXFWriter(encoding='utf-8',prettyprint=True,version='1.1draft')
writer.add_graph(G)
print tostring(writer.xml)


7

जो लोग सिफारिश के लिए pyd3 , यह अब सक्रिय विकास और आप अंक के लिए किया जा रहा है विंसेंटविन्सेन्ट भी अब सक्रिय विकास के अधीन नहीं है और वेदी का उपयोग करने की सलाह देते हैं ।

तो अगर आप एक pythonic d3 चाहते हैं, तो वेदी का उपयोग करें।



5

की जाँच करें अजगर-nvd3 । यह nvd3 के लिए एक अजगर आवरण है। D3.py की तुलना में ठंडा दिखता है और इसमें चार्ट के अधिक विकल्प भी हैं।


4

मैं mpld3 का उपयोग करने का सुझाव दूंगा जो कि pjthon के matplotlib के साथ D3js जावास्क्रिप्ट विज़ुअलाइज़ेशन को जोड़ती है।

स्थापना और उपयोग वास्तव में सरल है और इसमें कुछ शांत प्लगइन्स और इंटरैक्टिव सामान हैं।

http://mpld3.github.io/


3

प्लोटी आपके लिए कुछ शांत चीजें कर सकता हैयहां छवि विवरण दर्ज करें

https://plot.ly/

अत्यधिक संवादात्मक रेखांकन पैदा करता है जिसे आसानी से अपने निजी सर्वर या वेबसाइट के लिए एचटीएमएल पृष्ठों को बंद लाइन एपीआई का उपयोग करके एम्बेड किया जा सकता है।

अद्यतन: मुझे लगता है कि इसकी 3 डी प्लॉटिंग क्षमताओं के बारे में निश्चित है, 2 डी ग्राफ़ के लिए बहुत बढ़िया है धन्यवाद


2
ध्यान दें कि यह चार्ट विज़ुअलाइज़ेशन है ... प्रश्न ग्राफ विज़ुअलाइज़ेशन का अनुरोध करता है । (मैं इन वाक्यांशों की आमतौर पर प्रशंसा करता हूं!)
j6m8

2

आप अपने डेटा को क्रमबद्ध करना भी चुन सकते हैं और फिर इसे D3.js में विज़ुअलाइज़ कर सकते हैं, जैसा कि यहां किया गया है: एक डी 3 फोर्स डायरेक्टेड नेटवर्क डायग्राम बनाने के लिए पायथन और पंडों का उपयोग करें (यह एक ज्यूपिटर नोटबुक के साथ भी आता है !)

यहाँ है जिस्ट। आप इस प्रारूप में अपने ग्राफ डेटा को क्रमबद्ध करें:

import json
json_data = {
  "nodes":[
    {"name":"Myriel","group":1},
    {"name":"Napoleon","group":1},
    {"name":"Mlle.Baptistine","group":1},
    {"name":"Mme.Magloire","group":1},
    {"name":"CountessdeLo","group":1},
  ],
  "links":[
    {"source":1,"target":0,"value":1},
    {"source":2,"target":0,"value":8},
    {"source":3,"target":0,"value":10},
    {"source":3,"target":2,"value":6},
    {"source":4,"target":0,"value":1},
    {"source":5,"target":0,"value":1},
  ]
}
filename_out = 'graph_data.json'
json_out = open(filename_out,'w')
json_out.write(json_data)
json_out.close()

फिर आप डेटा को d3.js के साथ लोड करते हैं:

d3.json("pcap_export.json", drawGraph);

दिनचर्या के लिए drawGraphमैं आपको लिंक का उल्लेख है, लेकिन।


मैंने इसे अभी संपादित किया है, लेकिन मैंने ड्रॉग्राफ रूटीन को शामिल नहीं किया है जो खुद ही ड्रॉलिंक और ड्रॉडनॉड्स कहता है। यह सिर्फ बहुत बोझिल होगा और तत्व केवल पूरे HTML फ़ाइल के संदर्भ में समझ में आते हैं।
लुट्ज़ बुच

1

जावास्क्रिप्ट के लिए NetworkX का एक दिलचस्प पोर्ट है जो वह कर सकता है जो आप चाहते हैं। Http://felix-kling.de/JSNetworkX/ देखें


यह काम कर सकता है .... क्या आप कृपया मुझे प्रलेखन का उल्लेख कर सकते हैं? मैं कैसे इस जावास्क्रिप्ट पुस्तकालय में अजगर से एक ग्राफ उत्पादन होगा ...? मैं इसे पहले अजगर में उत्पन्न करना चाहता हूं ... या मैं इसे कैसे लोड करूंगा?
एरियोउन वॉन कौयफ

मैंने वास्तव में JSNetworkX का उपयोग कभी नहीं किया है इसलिए मुझे यकीन नहीं है कि यह कैसे काम करता है।
एरिक

@ EiyrioüvonKauyf: इनपुट पाइथन की तरह ही है, उदाहरणों की सूची या डिक्ट्स की एक सूची। आप पायथन में ग्राफ का निर्माण कर सकते हैं, इसे सूचियों की सूची में परिवर्तित कर सकते हैं और इसे JSON में परिवर्तित कर सकते हैं।
फेलिक्स क्लिंग

हाँ, निश्चित रूप से आसान है। यहाँ उदाहरण सरल और सुंदर हैं: felix-kling.de/JSNetworkX/examples
Aric

1

देख:

वहाँ एक अच्छा इंटरैक्टिव 3 डी ग्राफ पुस्तकालय है?

स्वीकृत उत्तर निम्नलिखित कार्यक्रम का सुझाव देता है, जिसमें जाहिरा तौर पर अजगर बाँधता है: http://ubietylab.net/ubigol/

संपादित करें

मैं NetworkX की अन्तरक्रियाशीलता के बारे में निश्चित नहीं हूँ, लेकिन आप निश्चित रूप से 3D ग्राफ़ बना सकते हैं। गैलरी में कम से कम एक उदाहरण है:

http://networkx.lanl.gov/examples/drawing/edge_colormap.html

और 'उदाहरण' में एक और उदाहरण। हालाँकि, यह आवश्यक है कि आपके पास मायावी हो।

http://networkx.lanl.gov/examples/3d_drawing/mayavi2_spring.html


0

मुझे अपने आप ही यहां पायथन का उपयोग करते हुए D3.js नेटवर्क आरेख बनाने का एक अच्छा उदाहरण मिल गया है: http://brandonrose.org/ner2sna

अच्छी बात यह है कि आप स्वतः उत्पन्न HTML और JS के साथ समाप्त हो सकते हैं और एक IFrame के साथ नोटबुक में इंटरैक्टिव डी 3 चार्ट एम्बेड कर सकते हैं


0

पुस्तकालय d3graphअजगर के भीतर से एक बल-निर्देशित डी 3-ग्राफ का निर्माण करेगा। आप किनारे के वजन के आधार पर नेटवर्क को "तोड़" सकते हैं, और अधिक जानकारी के लिए नोड्स पर मंडरा सकते हैं। एक नोड पर डबल क्लिक नोड और इसके जुड़े किनारों पर ध्यान केंद्रित करेगा।

pip install d3graph

उदाहरण:

source = ['node A','node F','node B','node B','node B','node A','node C','node Z']
target = ['node F','node B','node J','node F','node F','node M','node M','node A']
weight = [5.56, 0.5, 0.64, 0.23, 0.9,3.28,0.5,0.45]

# Import library
from d3graph import d3graph, vec2adjmat

# Convert to adjacency matrix
adjmat = vec2adjmat(source, target, weight=weight)
print(adjmat)
# target  node A  node B  node F  node J  node M  node C  node Z
# source                                                        
# node A    0.00     0.0    5.56    0.00    3.28     0.0     0.0
# node B    0.00     0.0    1.13    0.64    0.00     0.0     0.0
# node F    0.00     0.5    0.00    0.00    0.00     0.0     0.0
# node J    0.00     0.0    0.00    0.00    0.00     0.0     0.0
# node M    0.00     0.0    0.00    0.00    0.00     0.0     0.0
# node C    0.00     0.0    0.00    0.00    0.50     0.0     0.0
# node Z    0.45     0.0    0.00    0.00    0.00     0.0     0.0

# Example A: simple interactive network
out = d3graph(adjmat)

# Example B: Color nodes
out = d3graph(adjmat, node_color=adjmat.columns.values)

# Example C: include node size
node_size = [10,20,10,10,15,10,5]
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size)

# Example D: include node-edge-size
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], cmap='Set2')

# Example E: include node-edge color
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF')

# Example F: Change colormap
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF', cmap='Set2')

# Example H: Include directed links. Arrows are set from source -> target
out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF', cmap='Set2', directed=True)

D3graph के उदाहरण

टाइटैनिक-केस से इंटरएक्टिव उदाहरण यहां पाया जा सकता है: https://erdogant.github.io/docs/d3graph/titanic_example/index.html https://erdogant.github.io/pnet/pages/html/Use%20Cases .html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.