用Networkx和matplotlib画图时无法保存图片的问题

在使用NetworkX和matplotlib绘制并保存图形时,遇到保存的图片为空白的问题。原因在于`plt.show()`方法导致文件对象仍处于打开状态,影响了`plt.savefig()`的正常写入。解决方案包括注释掉`plt.show()`,或者使用`plt.show(block=False)`,或者先保存再显示。通过修改代码,可以成功保存带有内容的图片。
摘要由CSDN通过智能技术生成

问题:用 NetworkX 和 matplotlib画图时,想要保存为jpg或 png格式的图片,结果发现保存的图片上没有任何内容,只是一个白色的图像。

 以下是我的源代码:

def visualization(graph, R, sml):
    plt.figure(figsize=(15, 8))
    g = graph.to_networkx(node_attrs='h', edge_attrs='')  # 转换 dgl graph to networks
    pos = nx.kamada_kawai_layout(g)

    pos_higher = {}
    for k, v in pos.items():
        if (v[1] > 0):
            pos_higher[k] = (v[0] - 0.04, v[1] + 0.04)
        else:
            pos_higher[k] = (v[0] - 0.04, v[1] - 0.04)

    nodes = []
    weights = []
    for idx_atom in range(graph.nodes().shape[0]):
        weight = float(R[idx_atom])
        weights.append(weight)
        nodes.append((idx_atom, {"weight": weight}))
    g.add_nodes_from(nodes)

    cmap = plt.cm.get_cmap('Greens')
    nx.draw(g, with_labels=True, pos=pos, node_color=weights, cmap=cmap, node_size=800, font_color="black")

    plt.show()
    plt.savefig('./graphs/' + sml + ".png", format="PNG")

它与plt.show有关方法。

在脚本中调用 plt.show(),文件对象仍处于打开状态,并且 plt.savefig写入方法无法完全从该流中读取。因此,解决方法为注释掉plt.show()这一行:

# plt.show()
plt.savefig('./graphs/' + sml + ".png", format="PNG")

或者

plt.show(block=False)
plt.savefig('./graphs/' + sml + ".png", format="PNG")

 或者或者在显示之前保存

plt.savefig('./graphs/' + sml + ".png", format="PNG")
plt.show()

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值