在plt.show()和fig.savefig()中使用不同的绘图尺寸

3

我需要创建一些图形并将其整合到科学文献中。由于空间有限,图形和字体的大小相当小。

为了调试/方便起见,在使用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版本。

2个回答

1

顺便提一句:你不应该使用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的版本。


谢谢!它按照预期工作,我也感谢您关于导入的评论。 - W. Alpha
1
我通过增加图例的字体大小来稍微改进了解决方案:for text in ax.get_legend().get_texts(): text.set_fontsize(_displayFontSize) - W. Alpha

1
我认为如果将绘图放大以进行调试或放大目的,您可能不希望更改情节中的任何内容。这就是为什么您可能不想更改任何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):

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接