これは、Matplotlibでの私の最大の不満の1つです。私はしばしばラスタデータを使って作業します。たとえば、カラーマップ、凡例、およびいくつかのタイトルを追加したいとします。これを行うmatplotlibギャラリーの簡単な例では、解像度が異なるため、データが再サンプリングされます。特に画像解析を行うときには、不要なリサンプリングをしないでください。
ここに私が通常行っていることがありますが、もっとシンプルで良い方法があるかどうかを知りたいです。それは全体図にまたがるので、私は手動で軸位置を定義
import matplotlib.pyplot as plt
import urllib2
# load the image
img = plt.imread(urllib2.urlopen('http://upload.wikimedia.org/wikipedia/en/thumb/5/56/Matplotlib_logo.svg/500px-Matplotlib_logo.svg.png'))
# get the dimensions
ypixels, xpixels, bands = img.shape
# get the size in inches
dpi = 72.
xinch = xpixels/dpi
yinch = ypixels/dpi
# plot and save in the same size as the original
fig = plt.figure(figsize=(xinch,yinch))
ax = plt.axes([0., 0., 1., 1.], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')
plt.savefig('D:\\mpl_logo.png', dpi=dpi, transparent=True)
注
画像をロードし、それが同じ解像度であるだけとして出力で開始します。あなたがラベルやカラーバーなど
この例を可能にするために、画像の周りにいくつかのマージンを追加することができ、上記と同様の方法で
は、タイトルをプロットするために使用されている画像、上記の20%のマージンを追加します。
fig = plt.figure(figsize=(xinch,yinch/.8))
ax = plt.axes([0., 0., 1., .8], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')
ax.set_title('Matplotlib is fun!', size=16, weight='bold')
plt.savefig('D:\\mpl_logo_with_title.png', dpi=dpi)
したがって、図形のyサイズ(高さ)が増加し、軸のyサイズが等しく減少します。これにより、より大きな(全体的な)出力画像が得られますが、軸領域は同じサイズになります。
真の1-on-x出力を強制するには、.set_scale()のようなFigureまたはAxesプロパティが必要な場合があります。
'gridspec'は、あなたが望むものを制御することができます(最後の3つの例を参照してください)(http://matplotlib.org/examples/pylab_examples/demo_tight_layout.html))。問題を引き起こす異なる軸の記述を示すいくつかの例を追加できますか? – Bonlenfum
これは、MPLが何を描画するかの記述と、それを描画するための_how_の記述を分離する方法のコストです。これを手作業で行い、 'tight_layout 'を慎重に避けることは、これを行う最善の方法です。 – tacaswell