我必须创建一些我想要整合到科学文档中的图。由于空间限制,绘图的大小以及字体大小相当小。
出于调试/方便的原因,最好使用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。
答案 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()
已保存(左)和显示(右)版本:
可以说,只需关闭已保存的图表,修改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()
显示图(300 dpi):