CarppyでMatplotLibを使用して、いくつかのデータイメージを生成しました。問題は、フレームサイズをフルスクリーンに設定してplt.show()を使用すると、画像が完全で解像度が良いことです。
ただし、「plt.savefig()」を使用してこの図を保存すると、保存された画像は元のサイズ(フルスクリーンではない)で保持されます。
結果画像を表示:
私のコードは次のとおりです:
def plot_tec_cartopy(descfile):グローバル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()にいくつかのパラメーターを設定する必要がありますか?誰かがこの問題について私を助けてくれますか?
前もって感謝します。
MATLABからの場合、表示されたFigureが寸法などの点で保存されたFigureに影響を与える必要がないことは直観的ではありません。それぞれが異なるバックエンドによって処理され、dpi
および_size_inches
_お好みに応じて。
DPIを大きくすることは、特にPNGのようなフォーマット(インチ単位のサイズがわからない)で大きな図を取得するのに役立ちます。ただし、図自体に対してテキストを拡大縮小することはできません。
これを行うには、オブジェクト指向API、具体的には _figure.set_size_inches
_ を使用する必要があります。これには、plt
に同等のものはないと思います。交換する
_plt.savefig(figName, dpi=500)
_
と
_fig = plt.gcf()
fig.set_size_inches((8.5, 11), forward=False)
fig.save(figName, dpi=500)
_
サイズ_8.5, 11
_は、それぞれ米国での標準用紙サイズの幅と高さです。好きなように設定できます。たとえば、画面サイズを使用できますが、その場合はDPIも正しくなるようにしてください。