Изображение графика с высоким разрешением с использованием 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 есть инструмент, который позволяет увеличить любую часть графика: