Изображение графика с высоким разрешением с использованием NetworkX и Matplotlib

У меня есть код Python для генерации случайного графа из 300 узлов и 200 ребер и отображения его

import networkx as nx
import matplotlib.pyplot as plt

G = nx.gnm_random_graph(300,200)
graph_pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, graph_pos, node_size=10, node_color='blue', alpha=0.3)
nx.draw_networkx_edges(G, graph_pos)
nx.draw_networkx_labels(G, graph_pos, font_size=8, font_family='sans-serif')
plt.show()

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

Если я поставлю

plt.figure(figsize=(18,18))

перед показом узлы и ребра не отображаются. В чем проблема и как это исправить?

1 ответ

Решение

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

import networkx as nx
import matplotlib.pyplot as plt

plt.figure(figsize=(18,18))

G = nx.gnm_random_graph(300,200)
graph_pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, graph_pos, node_size=10, node_color='blue', alpha=0.3)
nx.draw_networkx_edges(G, graph_pos)
nx.draw_networkx_labels(G, graph_pos, font_size=8, font_family='sans-serif')

plt.show()

Чтобы получить изображение (здесь важно разрешение), которое можно масштабировать и избежать больших пикселей, вы можете либо:

plt.savefig("plot.png", dpi=1000)

, сохраняя png с очень большим dpi. Или же:

plt.savefig("plot.pdf")

, который сохранит график в виде векторной графики (в формате pdf). В окне графика Matplotlib есть инструмент, который позволяет увеличить любую часть графика:

Инструмент масштабирования в сюжете matplotlib

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