[PYTHON] Visualisez des graphiques avec des arêtes étiquetées en japonais sur NetworkX et PyGraphviz / Gephi

introduction

NetworkX peut également utiliser matplotlib, mais il semble que dessiner le graphique avec PyGraphviz ou Gephi donne divers paramètres plus fins.

Ici, après avoir créé un graphe avec des arêtes étiquetées en japonais dans NetworkX sur Python, objet de classe AGraph (format point) Voici un exemple de conversion en /agraph.html) et de sortie du résultat du dessin sous forme de fichier avec pygraphviz, et en même temps de sortie d'un fichier GraphML. Le fichier GraphML de sortie peut être entré dans Gephi pour la visualisation.

Incidemment, je vais résumer la méthode d'installation.

Installation

NetworkX

> pip install networkx

PyGraphviz

Si vous essayez de l'insérer avec pip tel quel, vous obtiendrez une erreur telle que `` erreur fatale: fichier 'graphviz / cgraph.h' introuvable '' (https://pod.hatenablog.com/entry/2015/03/07/163911) Alors, installez-le selon cette page.

Graphviz est installé séparément et le chemin est transmis. Le fait est que PyGraphviz est emballé pour conda. Le but est de spécifier ce canal et de faire ce qui suit:

> conda install -c alubbock pygraphviz

Gephi

Installez depuis https://gephi.org/.

--Si vous souhaitez ouvrir GraphML en double-cliquant, cochez la case dans la spécification d'extension.

Propriétés des bords

Lors de l'ajout d'un bord côté NetworkX, ajoutez label comme indiqué ci-dessous.

import pygraphviz as pgv
import networkx as nx

G = nx.Graph()

#S'il s'agit d'un libellé inférieur, il sera reconnu comme un libellé côté Graphviz.
#Du côté Gephi, les majuscules ou les minuscules sont OK
G.add_edges_from([('Nœud 1', 'Nœud 2', {'label': 'Bord', 'weight': 0.2})])
print(list(G.nodes))

#Il est également possible d'ajouter des attributs
G.node['Nœud 1']['style'] = 'solid,filled'
G.node['Nœud 1']['fillcolor'] = '#ccccff'
G.node['Nœud 1']['shape'] = 'egg'

G.node['Nœud 2']['color'] = '#ff9999'
G.node['Nœud 2']['fontcolor'] = 'red'

G.edges['Nœud 1', 'Nœud 2']['style'] = 'dotted'
G.edges['Nœud 1', 'Nœud 2']['fontsize'] = 10
G.edges['Nœud 1', 'Nœud 2']['fontcolor'] = '#00cc66'

nx.write_graphml(G, "test.graphml")  #Fichier GraphML de sortie pour Gephi

#Convertir en AGraph pour GraphViz et dessiner
ag = nx.nx_agraph.to_agraph(G)
ag.node_attr.update(fontname="MS Gothic")  #Lors de l'utilisation de MS Gothic sous Windows
ag.edge_attr.update(fontname="MS Gothic")
print(ag)  #Peut être confirmé en langage point
ag.draw('test.pdf', prog='fdp')  #Essayez de spécifier fdp pour la mise en page

Si vous ajoutez d'autres attributs de langage à points tels que color aux nœuds et aux arêtes, cela sera reflété dans Graphviz.

Résultat de sortie Graphviz

Résultat du dessin

testgraph.png

Impression graphique

['Nœud 1', 'Nœud 2']
strict graph "" {
	node [fontname="MS Gothic"];
	edge [fontname="MS Gothic"];
Nœud 1[fillcolor="#ccccff",
		shape=egg,
		style="solid,filled"];
Nœud 2[color="#ff9999",
		fontcolor=red];
Nœud 1--Nœud 2[fontcolor="#00cc66",
		fontsize=10,
		label=Bord,
		style=dotted,
		weight=0.2];
}

Visualisez avec Gephi

Charger et configurer

  1. Lancez Gephi et ouvrez le fichier GraphML (test.graphml dans l'exemple ci-dessus) depuis" Ouvrir ". (Si vous avez ajouté l'extension au moment de l'installation, vous pouvez double-cliquer sur le fichier GraphML.)
  2. Cliquez sur le bouton Data Studio et vérifiez que l'étiquette s'affiche correctement dans les onglets Nœuds et Côtés.
  3. Définissez les paramètres suivants dans l'onglet "Paramètres" de l'aperçu.
  1. Appuyez sur le bouton "Mettre à jour".

Résultat du dessin

Exporter au format png. S'il est laissé tel quel, le bord est manquant. En ce qui concerne l'attribut d'arête, l'étiquette est devenue pointillée, j'ai donc supprimé tous les attributs d'arête et sorti à nouveau le fichier GraphML. (N'est-ce pas reproductible?)

Pour le moment, le japonais était affiché ...

exportedGephi.png

référence

--Si vous souhaitez ajouter d'autres attributs en langage point, il semble bon de se référer à l'article Qiita ici.

Recommended Posts

Visualisez des graphiques avec des arêtes étiquetées en japonais sur NetworkX et PyGraphviz / Gephi
Graphique étiqueté dans NetworkX
Visualisez les mots-clés dans les documents avec TF-IDF et Word Cloud
Élimination des caractères japonais brouillés de matplotlib et NetworkX de la bibliothèque Python
Générez dynamiquement des graphiques avec matplotlib et intégrez-les au PDF avec reporlab
Utiliser des graphiques directionnels avec networkx
Graphique de sortie networkX avec graphviz (PyGraphviz)