Сохранение матрицы matplotlib/networkx без полей
Когда я рисую фигуру с помощью matplotlib
, как мне сохранить ее без дополнительных полей?
Обычно, когда я сохраняю его как
plt.savefig("figure.png") # or .pdf
Я получаю его с некоторыми полями:
![enter image description here]()
Пример:
import matplotlib.pyplot as plt
import networkx as nx
G=nx.Graph()
G.add_edge('a','b',weight=1)
G.add_edge('a','c',weight=1)
G.add_edge('a','d',weight=1)
G.add_edge('a','e',weight=1)
G.add_edge('a','f',weight=1)
G.add_edge('a','g',weight=1)
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,node_size=1200,node_shape='o',node_color='0.75')
nx.draw_networkx_edges(G,pos,
width=2,edge_color='b')
plt.axis('off')
plt.savefig("degree.png", bbox_inches="tight")
plt.show()
Обновление 2:
Пространства задаются внутри осей. Это ясно, если я удаляю plt.axis('off')
Поэтому я думаю, что есть какой-то трюк для использования с пакетом Networkx.
Ответы
Ответ 1
добавьте коды ниже, чтобы ограничить границы графика перед сохранением.
попробуйте разные значения cut
, например, с 1.05 до 1.50, пока вы не подойдете.
# adjust the plot limits
cut = 1.05
xmax= cut*max(xx for xx,yy in pos.values())
ymax= cut*max(yy for xx,yy in pos.values())
plt.xlim(0,xmax)
plt.ylim(0,ymax)
Ответ 2
Попробуйте plt.savefig("figure.png", bbox_inches="tight")
.
Изменить: Ах, вы не упомянули, что используете networkx (хотя теперь я вижу, что он указан в теге). bbox_inches="tight"
- это способ плотно обрезать фигуру. Я не знаю, что делает networkx, но я предполагаю, что он устанавливает некоторые параметры графика, которые добавляют дополнительное пространство к осям. Вы должны искать решение в сети, а не matplotlib. (Может быть, например, что networkx добавляет пространство внутри осей, а не цифру, как выглядит, если вы удалите этот вызов axis('off')
?)
Ответ 3
Не зная специфики networkx, я не могу быть уверен, что это сработает, но чтобы полностью удалить пробелы из-за пределов осей в matplotlib, вы можете сделать что-то по строкам:
import matplotlib.pyplot as plt
ax = plt.axes([0, 0, 1, 1])
plt.plot(range(10))
Ответ 4
Немного взлома, но если вы используете nx.draw, то он будет более плотным.
Итак, вы могли бы сделать
nx.draw(G,pos,node_size=1200,node_shape='o',node_color='0.75', edgelist = [])
который просто рисует узлы и не имеет ребер. Тогда хорошо сделать
nx.draw_networkx_edges(G, pos, width=2, edge_color='b')
Ответ 5
Используйте следующее:
plt.margins(0.0)