Это мой первый опыт визуализации иерархических данных в формате словаря с помощью Python. Последняя часть данных выглядит так:
d = {^2820: [^391, ^1024], ^2821: [^759, 'w', ^118, ^51], ^2822: [^291, 'o'], ^2823: [^25, ^64], ^2824: [^177, ^2459], ^2825: [^338, ^1946], ^2826: [^186, ^1511], ^2827: [^162, 'i']}
Итак, у меня есть индексы в списках, ссылающиеся на ключи (индекс) словаря. Я полагаю, что это можно использовать в качестве базовой структуры для визуализации, поправьте меня, если я ошибаюсь. Символы в данных являются «конечными узлами/листами», которые не относятся к какому-либо индексу.
Я нашел NetworkX, который, возможно, можно было бы использовать для визуализации, но я понятия не имею, с чего начать с ним и моими данными. Я надеялся, что это будет что-то столь же простое, как:
import networkx as nx
import matplotlib.pyplot as plt
d = {^2820: [^391, ^1024], ^2821: [^759, 'w', ^118, ^51], ^2822: [^291, 'o'], ^2823: [^25, ^64], ^2824: [^177, ^2459], ^2825: [^338, ^1946], ^2826: [^186, ^1511], ^2827: [^162, 'i']}
G = nx.Graph(d)
nx.draw(G)
plt.show()
Я ищу иерархическую дендрограмму или какую-то кластеризацию в качестве вывода. Извините, на данный момент я не совсем уверен, что будет лучшей визуализацией, может быть, похоже на это:
ОБНОВИТЬ
На самом деле использовать NetworkX было очень просто. Я предоставляю другие простые образцы данных и ищу ответ, можно ли их визуализировать с помощью дендрограммы вместо графа проводной сети?
# original sequence: a,b,c,d,b,c,a,b,c,d,b,c
d = {^1: ['b', 'c'], ^2: ['a', ^1, 'd', ^1], 'S': [^2, ^2]}
G = nx.Graph(d)
nx.draw_spring(G, node_size=300, with_labels=True)
Как мы видим, на графике показаны простые отношения, а не иерархия и порядок данных, что я готов сделать. DiGraph дает больше деталей, но построить из него исходную последовательность все же невозможно:
Для дендрограммы, по-видимому, необходимо рассчитать вес и конечные узлы, как указано в первом ответе. Для этого подхода структура данных может быть примерно такой:
d = {'a': [], 'b': [], 'c': [], 'd': [], ^1: ['b', 'c'], ^2: ['a', ^1, 'd', ^1], 'S': [^2, ^2]}