2017-08-04 4 views
2

私は、CartopyでMatplotLibを使っていくつかのデータ画像を生成しました。 問題は、フレームサイズをフルスクリーンに設定してplt.show()を使用すると、画像が完璧で解像度が良いことです。MatplotLib 'saveFig()'フルスクリーン

ただし、 'plt.savefig()'を使用してこの図を保存すると、保存されたイメージは元のサイズ(フルスクリーンではありません)で保持されます。

表示結果の画像:

Showing the image - not saving it

Saving the image - not showing it

私のコードは次のとおりです:

デフ(DESCFILE)plot_tec_cartopy: グローバルmatrixLon、matrixLat、matrixTec

ax = plt.axes(projection=cartopy.crs.PlateCarree()) 

v = np.linspace(0, 80, 46, endpoint=True) 
cp = plt.contourf(matrixLon, matrixLat, matrixTec, v, cmap=plt.cm.rainbow) 
plt.clim(0, 80) 
plt.colorbar(cp) 

ax.add_feature(cartopy.feature.COASTLINE) 
ax.add_feature(cartopy.feature.BORDERS, linestyle=':') 
ax.set_extent([-85, -30, -60, 15]) 

# Setting X and Y labels using LON/LAT format 
ax.set_xticks([-85, -75, -65, -55, -45, -35]) 
ax.set_yticks([-60, -55, -50, -45, -40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15]) 
lon_formatter = LongitudeFormatter(number_format='.0f', 
            degree_symbol='', 
            dateline_direction_label=True) 
lat_formatter = LatitudeFormatter(number_format='.0f', 
            degree_symbol='') 
ax.xaxis.set_major_formatter(lon_formatter) 
ax.yaxis.set_major_formatter(lat_formatter) 

plt.title('Conteúdo Eletrônico Total', style='normal', fontsize='12') 

# Acquiring Date 
year, julianday = check_for_zero(descfile.split('.')[2]), descfile.split('.')[3] 
hour, minute = descfile.split('.')[4], descfile.split('.')[5].replace('h','') 
date = datetime.datetime(int(year), 1, 1, int(hour), int(minute)) + datetime.timedelta(int(julianday)-1) 
month = date.month 
day = date.day 

# Set common labels 
ax.text(1.22, 1.05, 'TEC', style='normal', 
    verticalalignment='top', horizontalalignment='right', 
    transform=ax.transAxes, 
    color='black', fontsize=11) 
ax.text(1, 0.005, 'EMBRACE/INPE', style='italic', 
    verticalalignment='bottom', horizontalalignment='right', 
    transform=ax.transAxes, 
    color='black', fontsize=10) 
ax.text(1, 0.995, str(date) + ' UT', style='italic', 
    verticalalignment='top', horizontalalignment='right', 
    transform=ax.transAxes, 
    color='black', fontsize=10) 
ax.text(0.5, -0.08, 'Copyright \N{COPYRIGHT SIGN} 2017 INPE - Instituto Nacional de', 
    style='oblique', transform=ax.transAxes, 
    verticalalignment='bottom', horizontalalignment='center', 
    color='black', fontsize=8) 
ax.text(0.5, -0.108, 'Pesquisas Espacias. Todos direitos reservados', 
    style='oblique', transform=ax.transAxes, 
    verticalalignment='bottom', horizontalalignment='center', 
    color='black', fontsize=8) 

manager = plt.get_current_fig_manager() 
manager.resize(*manager.window.maxsize()) 

figName = 'tec.map' + '.' + str(year) + '.' + str(julianday) + '.' + str(hour) + '.' + str(minute) + 'h.png' 
#plt.show() 
plt.savefig(figName, dpi=500) 
plt.clf() 

おそらく、変更されたフレームを保存する必要があると言うために、savefig()にいくつかのパラメータを設定する必要がありますか?誰かがこの問題で私を助けることができますか?

ありがとうございます。

+0

私は、画面上の図形とファイル内の図形とが何らかの形で関係していることを期待しているMATLABユーザーを推測しますか? –

+0

参考になりましたが、私はそれを詐欺だとは考えていません:https://stackoverflow.com/a/4306340/2988730。私は今あなたに答えを書いています。 –

答えて

2

MATLABからは、表示された図形が寸法などの点で保存された図形に影響を与える必要はありません。dpisize_inchesはそれぞれ異なるバックエンドによって処理されます。選択してください。

DPIを増やすことは、特にサイズをインチ単位で知らないPNGのようなフォーマットでは、大きな数字を得るのを助けることになります。ただし、Figure自体に相対的なテキストの縮尺には役立ちません。

これを行うには、オブジェクト指向のAPI、具体的にはfigure.set_size_inchesを使用する必要があります。これはpltに相当するとは思われません。

fig = plt.gcf() 
fig.set_size_inches((8.5, 11), forward=False) 
fig.save(figName, dpi=500) 

plt.savefig(figName, dpi=500) 

を交換してくださいサイズ8.5, 11は、それぞれ米国、内標準用紙サイズの幅と高さです。あなたはそれをあなたが望むものに設定することができます。たとえば、画面サイズを使用できますが、その場合は必ずDPIを取得するようにしてください。

+0

あなたのソリューションは素晴らしいですし、問題を解決しました! あなたの答え、Mad Physicistに感謝します。 :) – Hollweg

+1

伝統的に、あなたはそれの隣にあるチェックマークをクリックして答えをマークし、あなたが評判を持っていればupvotingすることによって祝うでしょう。 –

+0

@Hollwegあなたは回答をアップアップするほどの評判はないかもしれませんが、あなたはいつでもあなたのために有益な答えを受け入れることができます。あなたの質問への回答を受け入れることもできるように、あなたの質問を「答えられていない」リストから削除する。 – swatchai

関連する問題