今天做我正在做一個報告爲一個療程,我需要包括一些領域的等高線圖的身影。我這樣做是與matplotlib(忽略亂頭):減少.EPS圖形的大小使用matplotlib
import numpy as np
import matplotlib
from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
## for Palatino and other serif fonts use:
#rc('font',**{'family':'serif','serif':['Palatino']})
rc('text', usetex=True)
from matplotlib.mlab import griddata
import matplotlib.pyplot as plt
import numpy.ma as ma
from numpy.random import uniform
from matplotlib.colors import LogNorm
fig = plt.figure()
data = np.genfromtxt('Isocurvas.txt')
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
rc('text', usetex=True)
rc('font', family='serif')
x = data[:,0]
y = data[:,1]
z = data[:,2]
# define grid.
xi = np.linspace(0.02,1, 100)
yi = np.linspace(0.02,1.3, 100)
# grid the data.
zi = griddata(x,y,z,xi,yi)
# contour the gridded data.
CS = plt.contour(xi,yi,zi,25,linewidths=0,colors='k')
CS = plt.contourf(xi,yi,zi,25,cmap=plt.cm.jet)
plt.colorbar() # draw colorbar
# plot data points.
plt.scatter(x,y,marker='o',c='b',s=0)
plt.xlim(0.01,1)
plt.ylim(0.01,1.3)
plt.ylabel(r'$t$')
plt.xlabel(r'$x$')
plt.title(r' Contour de $\rho(x,t)$')
plt.savefig("Isocurvas.eps", format="eps")
plt.show()
其中「Isocurvas.txt」是一個3列文件,我真的不想碰(消除數據,或類似的東西,止跌不爲我工作)。我的問題是數字大小爲1.8 Mb,這對我來說太過分了。這個數字本身比整個報告的其餘部分都大,當我打開PDF時,它並不是很平滑。
所以,我的問題是:
是否有降低這種尺寸,而不對圖形的質量犧牲的任何方式?我正在尋找任何解決方案,不一定與python有關。
這是.PNG圖中,與上參數的輕微變化。使用.png你可以看到像素,我不太喜歡,所以它是可取的pdf或eps。
謝謝。
那些不齊的邊緣(在強烈的藍色和中等藍色之間)似乎不是像素級別的問題,但可能是由於數據或方法瑕疵 –
你怎麼輪廓兩次?這可能會增加向量文件輸出的顯着開銷(顯然它對png或其他柵格化格式的文件大小沒有影響) – pelson
數據文件有多大(「Isocurvas.txt」) – tacaswell