D3.js'nin Python eşdeğeri


110

Etkileşimli grafik görselleştirme yapabilen bir Python kitaplığı öneren var mı?

Özellikle d3.js gibi bir şey istiyorum ama pythonideal olarak 3D de olacaktır.

Baktım:

  • NetworkX - sadece Matplotlibgrafikler yapıyor ve bunlar 2D gibi görünüyor. d3.jsEtrafındaki düğümleri çekmek gibi , veren gibi herhangi bir etkileşim görmedim .
  • grafik aracı - yalnızca 2B çizim yapar ve çok yavaş etkileşimli grafiklere sahiptir.

1
Networkx'te bir grafik oluşturmak ve ardından tarayıcı tabanlı bir sürüm arıyorsanız, d3.js'de değişiklik yapmak isteyebilirsiniz.
kreativitea

@kreativitea ok .... Bunu ideal olarak nasıl yapardım: Grafik Verileri (Python'da API Çağrıları aracılığıyla) -> Python (Makine Öğrenimi Öğeleri) -> Django / Bir Şey + D3.js (görselleştirme) -> Güzel resimler ve web sitesi :)
Eiyrioü von Kauyf

Python'da vega lite'ı uygulayabileceğinizi düşünüyorum. Şuna bir bakın ve tabii ki komplo.
Noel Harris

Yanıtlar:


74

Sen kullanabilirsiniz d3py d3.js senaryoyu gömme xml sayfaları oluşturmak olduğunu bir piton modülü. Örneğin :

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()

Benim için çalıştı, ancak satırlardan birini düzenlemem gerekiyordu with d3py.NetworkXFigure(G, width=500, height=500, host="localhost") as p:. Github'da d3py'nin en son kaydını kontrol ettim (SHA: 4e92a90f4003370bc086e0f57b19fca1bd4e8fba)
xb.

7
Maalesef d3py artık aktif olarak geliştirilmiyor - Vincent modern eşdeğerdir (Vega / d3.js için bir Python arayüzü), ancak psychemedia'nın aşağıdaki cevabı (networkx'i json'a aktarın ve sonra d3.js'de render edin) en temiz cevap olabilir.
A.

2
D3py ve vincent'in halefi altair - viz.github.io'yu deneyin . Ayrıca stackoverflow.com/a/49695472/179014 adresine de bakın .
asmaier

43

Plotly interaktif 2D ve 3D grafikleri destekler. Grafikler D3.js ile oluşturulur ve Python API , matplotlib , Python , Seaborn , prettyplotlib ve pandalar için ggplot ile oluşturulabilir . Yakınlaştırabilir, kaydırabilir, izleri açıp kapatabilir ve fareyle üzerine gelindiğinde verileri görebilirsiniz. Grafikler HTML'ye, uygulamalara, gösterge tablolarına ve IPython Not Defterlerine gömülebilir. Aşağıda, etkileşimi gösteren bir sıcaklık grafiği bulunmaktadır . Daha fazla örnek için IPython Notebooks eğitimleri galerisine bakın .

görüntü açıklamasını buraya girin



Docs desteklenen arsa türleri ve kod parçacıkları örnekleri sağlar.



görüntü açıklamasını buraya girin

Sorunuza özel olarak , NetworkX'ten etkileşimli grafikler de oluşturabilirsiniz .

görüntü açıklamasını buraya girin

Python ile 3B çizim için benzer şekilde etkileşimli 3B dağılım, çizgi ve yüzey grafikleri oluşturabilirsiniz. Grafikler WebGL ile oluşturulur. Örneğin, UK Swap oranlarının 3D grafiğine bakın .



görüntü açıklamasını buraya girin

Açıklama: Plotly ekibindeyim.


9
Açıkça soru, kenarlarla bağlı düğümler anlamında grafikleri hedefliyor . Bu cevap gereksiz yere komplo diğer görselleştirme yeteneklerini içerir.
Lutz Büch

@ mateo-sanchez Plotly'nin kurumsal müşterilere odaklanmak için tüm akademik ve bireysel abonelikleri sonlandırmaya karar vermesi çok talihsiz bir durum
Andreuccio

20

Vincent'a baktın mı? Vincent, Python veri nesnelerini alır ve bunları Vega görselleştirme gramerine dönüştürür. Vega, D3'ün üzerine inşa edilmiş üst düzey bir görselleştirme aracıdır. D3py ile karşılaştırıldığında, vincent repo yakın zamanda güncellendi. Örneklerin hepsi statik D3 olsa da.

Daha fazla bilgi:


Grafikler Ipython'da görüntülenebilir, sadece bu kodu ekleyin

vincent.core.initialize_notebook()

Veya JSON çıktı grafiğini Vega çevrimiçi düzenleyicide ( http://trifacta.github.io/vega/editor/ ) görüntüleyebileceğiniz veya yerel olarak Python sunucunuzda görüntüleyebileceğiniz JSON'a çıktı verin. Görüntüleme hakkında daha fazla bilgi yukarıdaki pypi bağlantısında bulunabilir.

Ne zaman olduğundan emin değilim, ancak Pandalar paketinin bir noktada D3 entegrasyonuna sahip olması gerekir. http://pandas.pydata.org/developers.html

Bokeh, etkileşimli görselleştirmeyi destekleyen bir Python görselleştirme kitaplığıdır. Birincil çıktı arka ucu HTML5 Canvas'tır ve istemci / sunucu modelini kullanır.

örnekler: http://continuumio.github.io/bokehjs/


2
Vincent çıkışta
naught101

19

Kullandığım bir tarif (burada açıklanmıştır: Scraperwiki ve networkx aracılığıyla OpenCorporates Data'dan GEXF ve JSON'daki Co-Director Network Data Files ) aşağıdaki gibi çalışır:

  • networkx kullanarak bir ağ temsili oluşturmak
  • ağı bir JSON dosyası olarak dışa aktar
  • bu JSON'yi d3.js'ye aktarın . ( networkx , d3.js'nin içe aktarabileceği hem ağacı hem de grafik / ağ temsillerini dışa aktarabilir).

Networkx JSON ihracatçı biçimini alır:

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

Alternatif olarak , ağı bir GEXF XML dosyası olarak dışa aktarabilir ve ardından bu gösterimi sigma.js Javascript görselleştirme kitaplığına içe aktarabilirsiniz .

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

Tavsiye edenler için pyd3 , bu kadar etkin geliştirme ve puan sen altında artık vincent . vincent artık aktif geliştirme aşamasındadır ve altair kullanılmasını önerir .

Yani bir pitonik d3 istiyorsanız, altair kullanın.



5

Check out piton-nvd3 . Nvd3 için bir python sarmalayıcısıdır. D3.py'den daha güzel görünüyor ve ayrıca daha fazla grafik seçeneğine sahip.


4

D3js javascript görselleştirmelerini python'un matplotlib'i ile birleştiren mpld3 kullanmanızı öneririm.

Kurulum ve kullanım gerçekten basittir ve bazı harika eklentileri ve etkileşimli öğeleri vardır.

http://mpld3.github.io/


3

Plotly sizin için harika şeyler yapabilirgörüntü açıklamasını buraya girin

https://plot.ly/

Çevrimdışı API'sini kullanarak özel sunucunuz veya web siteniz için HTML sayfalarına kolayca gömülebilen oldukça etkileşimli grafikler üretir.

Güncelleme: 3D çizim yeteneklerinden eminim, 2D grafikler için harika Teşekkürler


2
Bunun grafik görselleştirme olduğunu unutmayın ... Soru grafik görselleştirme gerektirir. (Bu ifadelerin genellikle karıştırıldığını
anlıyorum

2

Verilerinizi seri hale getirmeyi ve ardından burada yapıldığı gibi D3.js'de görselleştirmeyi de seçebilirsiniz: D3 Kuvvet Yönlendirmeli Ağ Şeması Oluşturmak için Python & Pandas'ı kullanın (Bir jupyter not defteriyle birlikte gelir !)

İşte özü. Grafik verilerinizi şu biçimde serileştirirsiniz:

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()

Ardından verileri d3.js ile yüklersiniz:

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

Bununla birlikte, rutin için drawGraphsizi bağlantıya yönlendiriyorum.


Şimdi düzenledim, ancak drawLinks ve drawNodes olarak adlandırılan drawGraph rutinini dahil etmedim. Çok külfetli olur ve öğeler yalnızca tüm html dosyası bağlamında anlam ifade eder.
Lutz Büch

1

İstediğinizi yapabilecek ilginç bir NetworkX Javascript portu var. Bkz. Http://felix-kling.de/JSNetworkX/


bu işe yarayabilir .... bana belgelere başvurabilir misiniz lütfen? Python'dan bu javascript kitaplığına nasıl bir grafik çıkarabilirim ...? Önce python'da üretmek istiyorum ... yoksa nasıl yüklerim?
Eiyrioü von Kauyf

Aslında JSNetworkX'i hiç kullanmadım, bu yüzden nasıl çalıştığından emin değilim.
Aric

@ EiyrioüvonKauyf: Girdi Python'daki ile aynıdır, örneğin bir liste listesi veya bir dikteler listesi. Grafiği Python'da oluşturabilir, bir liste listesine dönüştürebilir ve JSON'a dönüştürebilirsiniz.
Felix Kling

Evet, kesinlikle kolay. Buradaki örnekler basit ve güzel: felix-kling.de/JSNetworkX/examples
Aric

1

Görmek:

Dışarıda iyi bir etkileşimli 3D grafik kitaplığı var mı?

Kabul edilen cevap, görünüşe göre python bağlamalarına sahip olan aşağıdaki programı önermektedir: http://ubietylab.net/ubigraph/

Düzenle

NetworkX'in etkileşimi konusunda emin değilim, ancak kesinlikle 3D grafikler oluşturabilirsiniz. Galeride en az bir örnek var:

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

Ve 'örneklerdeki bir başka örnek. Ancak bu, Mayavi'ye sahip olmanızı gerektirir.

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


0

Burada Python kullanarak otomatik olarak D3.js ağ diyagramları oluşturmanın iyi bir örneğini buldum: http://brandonrose.org/ner2sna

İşin güzel yanı, otomatik olarak oluşturulan HTML ve JS'ye sahip olmanız ve etkileşimli D3 grafiğini bir IFrame ile bir not defterine yerleştirebilmenizdir.


0

Kitaplık d3graph, python içinden zorla yönlendirilmiş bir d3 grafiği oluşturacaktır. Ağı kenar ağırlığına göre "kırabilir" ve daha fazla bilgi için düğümlerin üzerine gelebilirsiniz. Bir düğüme çift tıklamak, düğüme ve onun bağlı kenarlarına odaklanacaktır.

pip install d3graph

Misal:

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)

Örneklerof d3graph

Titanic vakasından interaktif örnek burada bulunabilir: https://erdogant.github.io/docs/d3graph/titanic_example/index.html https://erdogant.github.io/hnet/pages/html/Use%20Cases .html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.