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

时间:2017-07-05 21:24:08

标签: python matplotlib fonts size font-size

我必须创建一些我想要整合到科学文档中的图。由于空间限制,绘图的大小以及字体大小相当小。 出于调试/方便的原因,最好使用plt.show()以更大的尺寸绘制图表和字体,然后使用较小尺寸的fig.savefig(...)将其存储为PDF文件。

我在显示之前设置了不同的绘图大小。但是,我无法更新字体大小。有什么想法可以做到这一点吗?

#!/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。

2 个答案:

答案 0 :(得分:0)

切线说明:你不应该from pylab import *,这会使你的命名空间混乱到各种不必要的东西:

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

正如您所注意到的,我并不认为设置任何rc参数会影响现有的图。你可能不得不弄脏手,虽然只是一点点:你需要修改Axes的少数几个孩子:

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()

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

saved version shown version

可以说,只需关闭已保存的图表,修改rcParams,然后重新绘制您想要的版本show,它可能会更优雅(或者是一种不同的混乱)。

答案 1 :(得分:0)

我认为你不想改变图中的任何内容,如果以更大的比例显示它是出于调试或放大的原因。这就是为什么你可能不想改变任何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()

保存的数字:
enter image description here

显示图(300 dpi):

enter image description here