8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

同步 matplotlib imshow 坐标

Abdul Qadeer 2月前

24 0

我正在尝试使用 networkx 创建图像,保存该图像以供稍后使用,然后稍后在其上方叠加一个图。但是,当我尝试加载图像并创建新点时,比例尺显示...

我正在尝试使用 networkx 创建图像,保存该图像以供稍后使用,然后稍后在其上方叠加一个图。但是,当我尝试加载图像并创建新点时,比例似乎不对。我已经尝试了所有可以找到的方法来使它们同步,但我不知道现在还能尝试什么。这是一个简单的例子:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
G = nx.dodecahedral_graph()
pos = nx.spring_layout(G)
plt.box(False)
nx.draw_networkx_edges(G, pos=pos)
fig.canvas.draw()

data = np.array(plt.gcf().canvas.get_renderer().buffer_rgba(), dtype=np.uint8)
extent = list(plt.xlim() + plt.ylim())

enter image description here

现在我有了一张图,并将该图像保存到 data ,并将该图的范围保存到 extent 。然后我想从 重新绘制该图, data 并覆盖图中的节点,位置存储在 pos .

plt.imshow(data, extent=extent)
plt.box(False)
nx.draw_networkx_nodes(G, pos=pos, node_color='green')

enter image description here

由于某种原因,原始图像的比例缩小了,因此节点最终的比例变大了,与边缘不匹配。这是我保存图像的方式出了问题吗?

帖子版权声明 1、本帖标题:同步 matplotlib imshow 坐标
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Abdul Qadeer在本站《matplotlib》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 看起来 matplotlib 在保存绘图数据时会在图像两侧添加填充。您可以通过 fig.tight_layout(pad=0) 在代码中添加以下内容来删除此填充:

    import networkx as nx
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure()
    G = nx.dodecahedral_graph()
    pos = nx.spring_layout(G)
    plt.box(False)
    nx.draw_networkx_edges(G, pos=pos)
    fig.tight_layout(pad=0)
    fig.canvas.draw()
    
    data = np.array(plt.gcf().canvas.get_renderer().buffer_rgba(), dtype=np.uint8)
    extent = list(plt.xlim() + plt.ylim())
    
  • 啊!我曾看到过建议在加载图像时设置紧凑布局,但出于某种原因,我没有考虑在保存之前尝试一下。非常感谢!!

返回
作者最近主题: