Визуализация с помощью матричных графиков
Настало время попробовать первый «продвинутый» метод визуализации графов — матричный график. Для этого в библиотеке nxviz есть функция matrix(). Как и все функции верхнего уровня API nxviz, она возвращает объект осей matplotlib, который можно отобразить с помощью plt.show().
nxviz — это пакет для наглядной визуализации графов. Внутри функция matrix использует nx.to_numpy_array(G), которая возвращает граф в матричном виде. Каждый узел представлен одним столбцом и одной строкой, а наличие ребра между двумя узлами обозначается значением 1. При этом из метаданных сохраняется только weight; все остальные метаданные теряются — вы убедитесь в этом с помощью оператора assert.
Обратная функция nx.from_numpy_array(A) позволяет быстро создать граф из массива NumPy. По умолчанию создаётся граф типа Graph(); если нужен DiGraph(), это необходимо указать через именованный аргумент create_using, например: nx.from_numpy_array(A, create_using=nx.DiGraph).
Обратите внимание: matplotlib.pyplot и networkx уже импортированы как plt и nx соответственно, а граф T предварительно загружен. Для удобства и скорости из сети было выбрано только 100 рёбер.
Это упражнение является частью курса
Введение в анализ сетей на Python
Инструкции к упражнению
- Импортируйте
matrixизnxviz. - Постройте граф
Tв виде матричного графика:- Создайте матричный график
mс помощью функцииnv.matrix(), передавTв качестве аргумента. - Отобразите график с помощью
plt.show().
- Создайте матричный график
- Преобразуйте граф в матричный формат, а затем конвертируйте его обратно в формат NetworkX как ориентированный граф. Этот шаг уже выполнен за вас.
- Убедитесь, что поле метаданных
categoryотсутствует в каждом узле. Это тоже уже сделано за вас — нажмите Отправить ответ, чтобы увидеть результаты!
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Import nxviz
____
# Create the matrix plot: m
m = ____
# Display the plot
____
# Convert T to a matrix format: A
A = nx.to_numpy_array(T)
# Convert A back to the NetworkX form as a directed graph: T_conv
T_conv = nx.from_numpy_array(A, create_using=nx.DiGraph())
# Check that the `category` metadata field is lost from each node
for n, d in T_conv.nodes(data=True):
assert 'category' not in d.keys()