Matplotlib在缩放的图表上如何保存savefig()?

4

使用 NetworkX 和 Matplotlib 绘制大图形

我本质上是在重新询问链接中的问题。我认为我可以更好地解释这个问题。在一个大图形上调用 mathplotlib.show() 时,默认情况下会得到一个缩小、聚集的输出。我的目标状态是使用 mathplotlib.savefig() 将绘图保存以便在报告中使用。然而,savefig() 的输出太过于缩小、概括。改变图片的大小或 dpi 不能解决这个问题,只会使得缩小后的图像变得更大。有没有一种方法可以放大图形并保存它,而不使用 UI?通过 UI,我可以缩放、展开节点,并围绕一个特定的节点进行中心对齐,但我不知道如何自动完成这个过程。

相关代码:

    nx.draw(G,pos,node_color=colorvalues, with_labels = False,node_size=values)
    fig.set_size_inches(11,8.5)
    if show ==0:
        plt.show()
    if show ==1:   
        plt.savefig(name+" coremem.png",bbox_inches=0,orientation='landscape',pad_inches=0.1)
2个回答

3
您可以使用 ax.set_xlimax.set_ylim 来设置绘图的 xy 范围。例如,
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

filename = '/tmp/graph.png'
G = nx.complete_graph(10)
pos = nx.spring_layout(G)
xy = np.row_stack([point for key, point in pos.iteritems()])
x, y = np.median(xy, axis=0)
fig, ax = plt.subplots()
nx.draw(G, pos, with_labels=False, node_size=1)
ax.set_xlim(x-0.25, x+0.25)
ax.set_ylim(y-0.25, y+0.25)
plt.savefig(filename, bbox_inches=0, orientation='landscape', pad_inches=0.1)

enter image description here


要找到在调用ax.set_xlimax.set_ylim之前的原始限制范围,请使用以下方法:

>>> ax.get_xlim()
(-0.20000000000000001, 1.2000000000000002)

ax.get_ylim()
(-0.20000000000000001, 1.2000000000000002)

谢谢。这是一个简单的命令,可笑的是我竟然忽略了它。我目前正在尝试找出一种数学方法来自动确定网络的质心并缩放到它。例如,我有节点的x值和y值的列表。我已经做了ax.set_xlim(min(xval)-.25,max(xval)+.25),以及y值相同。 .25是一个很好的缓冲区。我的问题是,在spring_layout中的大型图表中,两个彼此连接但与其余部分未连接的节点将远离彼此,这会破坏我的算法...我将继续努力解决这个问题... - Brad
你可以使用节点的 pos 给出的 xy 位置的中位数,而不是质心。我已经添加了一些代码来说明我的意思。 - unutbu

0

据我所知,你不能像缩放一样进行操作,但是你可以设置坐标轴。例如,如果你的原始图表在两个轴上都从1到100,你可以通过编程将其范围设置为仅从30到40,并保存它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接