2014-04-27 34 views
2

我試圖將一個簡化的繪圖保存爲EPS,然後使用epstopdf將其轉換爲PDF,因爲這會產生更小的文件大小。Matplotlib savefig到eps忽略可見性= False

我使用共享他們的x和y軸的多個子圖。我添加了一個總體子圖,所以我可以輕鬆添加xlabel和ylabel。我設置frameon = False,所以它不會出現。之後,我將這個座標軸的刺和剔除掉。當數字顯示時,我沒有看到任何來自大軸的東西。到現在爲止還挺好。

保存圖形時出現問題。保存到EPS然後轉換爲PDF使得標籤出現,並干擾我的文本。徹底去除標籤也不好,因爲間隔會將標籤放在我想要看到的標籤的標籤中。奇怪的是,保存到PDF沒有這個問題,但文件大小是11倍。

有沒有人知道我在做什麼錯,或發生了什麼事?

工作例如:

import matplotlib.pyplot as plt 
import numpy as np 
import subprocess 

fig, ax = plt.subplots(2, 2, sharex=True, sharey=True) 
ax = ax.flatten() 
ax = np.append(ax, fig.add_subplot(1, 1, 1, frameon=False)) 
ax[-1].spines['top'].set_color('none') 
ax[-1].spines['bottom'].set_color('none') 
ax[-1].spines['left'].set_color('none') 
ax[-1].spines['right'].set_color('none') 
ax[-1].tick_params(
    labelcolor='none', top='off', bottom='off', left='off', right='off') 
ax[-1].set_xlabel('$u$', fontsize=14) 
ax[-1].set_ylabel('$v$', fontsize=14) 
plt.setp(ax[-1].get_xticklabels(), visible=False) 

fig.savefig('TestPdf.pdf') 
fig.savefig('TestEps.eps') 
subprocess.check_call(['epstopdf', 'TestEps.eps']) 
plt.show() 
+0

http://stackoverflow.com/questions/19761335/phantom-axis-in-eps-images-despite-having-set-invisible-axis-in-matplotlib強烈懷疑這在同樣的問題 – tacaswell

+0

我沒有找到這個問題,但它確實似乎是相關的。 – Wouter

回答

0

你可以嘗試一些其他的後端。對於examle pgf後端(在matplotlib可1.3+)也能夠產生PDF格式的:

import matplotlib 
matplotlib.use("pgf") 

你可以得到與現有後端的列表:

matplotlib.rcsetup.all_backends 

,您可以檢查枯萎後端支持EPS或PDF文件使用:

import matplotlib 
matplotlib.use("BACKEND") 
import matplotlib.pyplot as plt 
fig = plt.figure() 
print fig.canvas.get_supported_filetypes() 
+0

我嘗試了所有可用的後端,都出現了相同的問題:EPS只是不正確顯示軸。 – Wouter

+0

但是,如果您的最終目標是pdf - 爲什麼您需要eps?如果直接生成的PDF大於使用eps生成的pdf - 這隻意味着您應該直接壓縮生成的PDF,例如用gs:'gs -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile =「Compressed.pdf」「Original.pdf」'。 – Adobe