plt.show() 和 fig.savefig() 的不同绘图大小

Different plot size for plt.show() and fig.savefig()

我必须创建一些我想整合到科学文档中的图。由于 space 的限制,绘图的大小以及字体大小都相当小。 出于 debugging/convenience 的原因,在使用 fig.savefig(...) 和较小的尺寸将其存储为 PDF 文件之前,最好使用 plt.show() 以较大尺寸的绘图和字体交互式地显示绘图。

我实现了在显示之前设置不同的绘图大小。但是,我无法更新字体大小。知道这怎么可能吗?

#!/usr/bin/env python

import matplotlib as mpl
from pylab import *

params = {
    'text.usetex': True,
    'font.size': 6,
}
mpl.rcParams.update(params)

fig = plt.figure(figsize=(3,2))
ax = fig.add_subplot(111)

x = [1, 2, 3]
y = [2, 2, 2]

ax.plot(x,y, label='label')

plt.tight_layout()
fig.savefig('plot.pdf')

fig.set_size_inches(10, 8, forward=True)
params = {'font.size': 20}
mpl.rcParams.update(params)
plt.show()

我用的是 Matplotlib 2.0.2,也试过 1.5.3。

切线注意:你不应该 from pylab import *,那会使你的命名空间充满各种不必要的东西:

>>> len(globals())
6
>>> from pylab import *
>>> len(globals())
988

如您所见,我认为设置任何 rc 参数都不会影响 现有的 图。您可能不得不亲自动手,尽管只是一点点:您的 Axes 中只有少数 children 需要修改:

import matplotlib as mpl
import matplotlib.pyplot as plt # <-- all you need here

params = {
    'text.usetex': True,
    'font.size': 6,
}
mpl.rcParams.update(params)

fig = plt.figure(figsize=(3,2))
ax = fig.add_subplot(111)

x = [1, 2, 3]
y = [2, 2, 2]

ax.plot(x,y, label='label')

plt.tight_layout()
fig.savefig('plot.pdf')

fig.set_size_inches(10, 8, forward=True)
# v--- change title and axeslabel font sizes manually
for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] +
             ax.get_xticklabels() + ax.get_yticklabels()):
    item.set_fontsize(20)
plt.show()

保存(左)和显示(右)版本:

可以说,关闭保存的绘图、修改 rcParams 并重新绘制想要 show 的版本可能更优雅(或另一种混乱)。

如果出于调试或放大的原因而以更大的比例显示它,我认为您不想更改情节中的任何内容。这就是为什么您可能不想更改任何 rc 参数,也不想更改图形大小的原因。

相反,您只需按照应为出版物保存的方式准备图形,保存后,更改其 dpi(每英寸点数),fig.set_dpi(xxx) .

import matplotlib as mpl
import matplotlib.pyplot as plt

params = {
    'text.usetex': True,
    'font.size': 6,
}
plt.rcParams.update(params)

fig = plt.figure(figsize=(3,2))
ax = fig.add_subplot(111)

x = [1, 2, 3]
y = [2, 2, 2]

ax.plot(x,y, label='label')
plt.legend()
plt.tight_layout()
fig.savefig('plot.pdf')

fig.set_dpi(300)

plt.show()

保存的数字:

如图(300 dpi):