Визуализация данных графиков

Мне нужно визуализировать графики, где каждая пара узлов, соединенных запятой, представляет ребро, а числовое значение представляет интенсивность этого ребра. Например, ('A', 'B'): 0,71 означает, что узел A соединен с узлом B с интенсивностью края 0,71. Теперь мне нужно визуализировать эти графики в Python. Вот данные графиков.

График 1

('A', 'B'): 0.71
('M', 'B'): 0.67
('N', 'B'): 0.64
('A', 'O'): 0.62
('O', 'B'): 0.60
('N', 'O'): 0.53
('M', 'O'): 0.46
('A', 'N'): 0.18
('M', 'N'): 0.11

График 2

('ABC', 'ADC'): 0.53

График 3

('CDE', 'CFH'): 0.28

График 4

('GHI', 'GMI'): 0.20

График5

('XYZ', 'XWZ'): 0.17

Может ли кто-нибудь помочь мне наглядно представить эти графики?

Я протестировал ваш код и столкнулся с той же проблемой перекрытия узлов, что и в моем собственном коде. Для справки я прикрепил выходное изображение, созданное вашим кодом. Для сохранения файла я использовал следующую команду: plt.savefig('graph_image.png')

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто используйте networkx:

import matplotlib.pyplot as plt
import networkx as nx

data = {
    ('A', 'B'): 0.71,
    ('M', 'B'): 0.67,
    ('N', 'B'): 0.64,
    ('A', 'O'): 0.62,
    ('O', 'B'): 0.60,
    ('N', 'O'): 0.53,
    ('M', 'O'): 0.46,
    ('A', 'N'): 0.18,
    ('M', 'N'): 0.11
}

Создайте график из вашего набора данных:

G = nx.Graph()
for key, value in data.items():
    G.add_edge(*key, weight=value)

И визуализируйте компоненты по своему желанию:

fig, axe = plt.subplots()
pos = nx.spring_layout(G, seed=123456)
nx.draw_networkx_nodes(G, pos, ax=axe)
nx.draw_networkx_edges(G, pos, ax=axe)
nx.draw_networkx_labels(G, pos, font_size=12, ax=axe)
nx.draw_networkx_edge_labels(G, pos, nx.get_edge_attributes(G, "weight"), ax=axe)

Обновлять

Чтобы управлять цветом края на основе веса, вы можете использовать следующий фрагмент:

fig, axe = plt.subplots()
pos = nx.spring_layout(G, seed=123456)
nx.draw_networkx_nodes(G, pos, ax=axe)
nx.draw_networkx_edges(G, pos, ax=axe, edge_color=data.values(), edge_cmap=plt.cm.jet)
nx.draw_networkx_labels(G, pos, font_size=12, ax=axe)
nx.draw_networkx_edge_labels(G, pos, nx.get_edge_attributes(G, "weight"), ax=axe)
nx.draw_networkx_edge_labels(G, pos, nx.get_edge_attributes(G, "weight"), ax=axe)

@jlandercy, большое спасибо за ответ. Мне интересно, показываем ли мы края с интенсивностью цвета (высокое значение дает более темный цвет, а низкое значение - светлый) вместо его значений?

Ahmad 14.08.2024 11:39

@jlandercy У меня возникла проблема с вашим кодом. Я обновил свой пост с подробностями проблемы. Не могли бы вы просмотреть его и посмотреть, сможете ли вы определить проблему?

Ahmad 14.08.2024 12:06

Я добавил фрагмент для окраски края в зависимости от веса. Я не могу воспроизвести вашу проблему. Я подозреваю, что вы строите несколько графиков на одном рисунке. Явно укажите цифру и топор (обновленный фрагмент), чтобы избавиться от этой проблемы. Не стесняйтесь отмечать ответ как ответивший, если я обратился к вашему ФП.

jlandercy 14.08.2024 12:37

Спасибо за дополнение. Во-первых, мне нужен только один цвет по краям, и край с высоким значением должен быть темнее, а край с меньшим значением должен быть светлее соответственно. Более того, я попробовал явно указать фигуру и топор, но получил ту же проблему.

Ahmad 14.08.2024 12:48

Не стесняйтесь выбирать правильную карту цветов, которая вам удобна (matplotlib.org/stable/users/explain/colors/colormaps.html, например: plt.cmap.Blues). Как я уже сказал, мне не удалось воспроизвести вашу проблему, экспорт явно созданного fig отлично работает с последней версией Matplotlib и NetworkX. Без подробностей отладки я ничего не могу сделать с этой проблемой. Не забудьте принять ответ, если он адресован вашему ОП.

jlandercy 14.08.2024 12:51

Спасибо, я приму ваш ответ, не волнуйтесь. Подскажите, пожалуйста, какие сведения об отладке мне следует предоставить?

Ahmad 14.08.2024 12:59

Другие вопросы по теме

Похожие вопросы

Как узнать, когда использовать Map_elements, Map_batches, Lambda и struct при использовании UDF?
Самый «Pythonic» способ заставить поведение, подобное массиву, на входных данных, не являющихся массивами?
Заполните несколько столбцов поляров постоянным значением
Поиск слова минимальной длины в заданной строке
Как обобщить функцию подгонки, чтобы позволить подгонке кривой sciPy определить количество входных данных
Наследование классов, где дочерними элементами являются простые классы, состоящие только из переменных
Pytorch — RuntimeError: ожидалось, что все тензоры будут на одном устройстве, но обнаружено как минимум два устройства: процессор и cuda:0
Получите логическое выражение из иерархического DataFrame Pandas
Правильное использование MPI с многопоточными функциями NumPy
Как получить значение указанного индексного номера в результате сортировки столбца и заполнить его нулевым значением, если оно отсутствует?