2017-07-05 514 views
2

我必須創建一些我想要集成到科學文檔中的繪圖。由於空間限制,情節的大小以及字體大小都很小。 爲了調試/便利的原因,會是不錯的交互顯示使用plt.show()與劇情和字體尺寸較大的情節,把它作爲使用fig.savefig(...)尺寸較小PDF文件之前。plt.show()和fig.savefig()不同的繪圖大小

我實現顯示它之前設置不同的繪圖尺寸。但是,我無法更新字體大小。任何想法如何這將是可能的?

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

切記:你不應該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 versionshown version

可以說,它可能是更優雅(或不同種類的雜亂),以閉上你保存的地塊,修改rcParams,並重繪要show版本。

+0

謝謝!這是應該的,我也很感謝你對進口的評論。 –

+1

我改善了溶液也增加了字體大小圖例一點點:在ax.get_legend'爲文本()get_texts(): text.set_fontsize(_displayFontSize)' –

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

相關問題