【问题标题】:PyCharm: pl.savefig output differs from pl.showPyCharm:pl.savefig 输出与 pl.show 不同
【发布时间】:2014-06-22 16:44:07
【问题描述】:

我有一些图,我想将它们保存为 .eps。但是 Spyder 中 PyCharm 的输出与 savefig 生成的输出不同。

这里是完整的代码:(基于这个讨论:Matplotlib - Broken axis example: uneven subplot size

# -*- coding: utf-8 -*-
import matplotlib.pylab as plt
import matplotlib.gridspec as gridspec
import numpy as np


dipole=[5.65,5.97,6.13,6.13,6.13]
cellsize1=np.array([40000./256,40000./512,40000./1024,40000./4096,40000./8192])
exchange=[22.3,20.6,20.4]
cellsize2=np.array([40000./1024,40000./4096,40000./8192])

k_dipol=5.3
k_ex=22.

yerr1=np.multiply(cellsize1,k_dipol**2/(1000*2*np.pi))
yerr2=np.multiply(cellsize2,k_ex**2/(1000*2*np.pi))


fig=plt.figure(num=None, figsize=(10, 4), dpi=80, facecolor='w', edgecolor='k')
font = {'weight' : 'normal', 'size'   : 13}
plt.rc('font', **font)

ylim2  = [4.5, 6.5]
ylim = [19., 25.5]
ylimratio = (ylim[1]-ylim[0])/(ylim2[1]-ylim2[0]+ylim[1]-ylim[0])
ylim2ratio = (ylim2[1]-ylim2[0])/(ylim2[1]-ylim2[0]+ylim[1]-ylim[0])
gs = gridspec.GridSpec(2, 1, height_ratios=[ylimratio, ylim2ratio])

ax = fig.add_subplot(gs[0])
plot1=ax.errorbar(cellsize2,exchange, yerr=yerr2, fmt='--o', label='Austausch')
ax.set_ylim(ylim)
ax.grid(True)
ax.xaxis.tick_top()
ax.tick_params(labeltop='off')

ax2 = fig.add_subplot(gs[1])
plot2=ax2.errorbar(cellsize1,dipole, yerr=yerr1, fmt='g--o', label='Dipol')
ax2.set_ylim(ylim2)
ax2.yaxis.set_ticks([5,6])
ax2.set_yticklabels([5,6])
ax2.grid(True)
ax2.xaxis.tick_bottom()
ax2.set_xlabel(u'Auflösung (nm/Zelle)')
ax2.set_ylabel(u'Wellenvektor (1/µm)')
ax2.yaxis.set_label_coords(0.05, 0.5, transform=fig.transFigure)

xlim = ax2.get_xlim()
ax.set_xlim(xlim)
ax2.set_xlim(xlim)

plt.subplots_adjust(hspace=0.1)
fig.legend((plot1, plot2), ('Austauschwelle','Dipolwelle'),
       bbox_to_anchor=[0.85, 0.9], prop={'size':9})

plt.savefig('Aufloesungsvergleich_k_vektoren.eps', bbox_inches='tight', pad_inches=0.05)
plt.show()

此代码产生以下输出

上半部分是eps文件。下半部分是我运行代码时弹出的窗口。请看图例的位置...

我猜这不正常?

【问题讨论】:

  • 尝试从您的savefig 通话中删除bbox_inches='tight'
  • @Ffisegydd 击中了它的头部。您应该将其发布为答案。
  • @FrankTheTank 您应该发布最少 数量的代码来证明您的问题。我认为这个问题可以用两行代码来证明。人们很乐意为您提供帮助,但为您进行调试并不那么兴奋。
  • 根据经验,对于大多数 matplotlib 问题,如果您的代码有滚动条,则它太长了。

标签: python matplotlib pycharm spyder


【解决方案1】:

当您在使用savefig 将 matplotlib 图保存为图像时选择 bbox_inches='tight' 时,该函数将尝试找到包含所有对象的最小、最紧密的框。

一个不幸的副作用是,当您比较plt.show() 的输出和plt.savefig() 的输出时,它似乎可以“移动”对象。如果您删除bbox_inches='tight',那么这应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2012-12-14
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多