【问题标题】:Differences between figure saved and figure displayed保存的图和显示的图之间的差异
【发布时间】:2014-04-28 12:33:07
【问题描述】:

我正在使用 matplotlib 创建一个绘图。一旦我有了这个图,我就会在我的 MainWindow 的布局中显示它,这个图看起来像这样:

看起来不错,一切都很好。

问题是,在展示它之前,我用fig.savefig('EvolLine.png') 保存了这个数字

而且保存的图看起来不一样。然后,当我尝试在 PDF 文件中使用这个保存的图形时,它看起来不太好。

这是保存的图:

此外,如果我使用绘图工具栏中的工具手动保存图形,则保存的图形再次看起来不错。

我不知道为什么如果我“以编程方式”保存图形,它看起来很糟糕,就像压缩一样。

那么我怎样才能以编程方式保存图形并使其看起来像在显示中??。

编辑:

如果有帮助,这就是我正在执行的保存和绘图过程:

fig = generateFigure(someData)
fig.savefig('EvolLine.png')
MyCanvas = FigureCanvas(fig)
navi_toolbar = NavigationToolbar(MyCanvas, self)
self.ui.verticalLayoutGraph4_3.addWidget(navi_toolbar)
self.ui.verticalLayoutGraph4_3.addWidget(MyCanvas)

#just to test
fig.savefig('EvolLine_AfterPlot.png')

【问题讨论】:

  • 我知道这听起来很傻,但是您是否尝试在 显示它之后保存它 - 只是一个猜测,但显示器可能会做额外的布局可能显示后可用?
  • 我很确定我试过保存后,反正我可以仔细检查,没问题。谢谢。
  • 你能提供你的代码吗?

标签: python matplotlib figure


【解决方案1】:

您的问题是,当您在程序中显示您的图形时,您正在控制纵横比,这意味着 x-ticks 不会重叠。但是,在保存图形时,您允许 matplotlib 自动猜测它应该做什么,但它会出错。

您可以使用fig.set_size_inches()通过设置适当的大小来控制纵横比,下面的代码演示了这一点并显示了不同的结果。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,100,1000)
y = np.sin(x)

plt.plot(x,y)
plt.xticks(range(0,100,2))

fig = plt.gcf()
fig.set_size_inches(16,4)

plt.savefig('filename.png')

原创

已修复

【讨论】:

  • 啊非常好!...愚蠢的matplotlib! :) 非常感谢。我会测试它并发布结果
  • 您可能需要改变这两个值(在我的例子中为(16, 4))以获得良好的结果。
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 2018-01-06
  • 2016-11-14
  • 2015-08-12
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多