イメージであるため、私は大規模にプロットしたい中型の配列(1500x3000など)を持っています。しかし、垂直と水平のスケールは非常に異なります。簡略化のため、1メートル/行と10 /列があるとします。次に、プロットはcである画像を生成すべきである。 1500x30000。私はスケールのためにkwargエクステントを使用し、変形を避けるためにaspect = 1を使用します。 プロットウィンドウ(QT4)とimshow()を使用するか、またはsavefig()を使用して、スケールとフル解像度で画像を生成することができませんでした。それはバグだった場合にはhere、here、またはhereとthereまたはthereに示すようにmatplotlib.pyplot、imshow()、savefig()でフル解像度でプロットする?
私は多く提案されたソリューションを見てきました。私は私のmatplotlibrcを変更し、〜/ .config/matplotlibに置いて、自分のdisplay/savefigオプションを強制しようとしましたが、役に立たないようにしました。私もpcolormesh()を試しましたが、成功しませんでした。私は、バックエンドとしてUbuntu 14.04とQT4AggのリポジトリからPython 2.7とmatplotlib 1.3を使用しています。私もTkAggを試しましたが、遅くて同じ結果が得られます。私は、x軸では解像度は正しいが、垂直方向に確実にダウンサンプリングされているという印象を持っている。ここに私の問題をシミュレートするコードがあります。 imshowを()で
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
R, C = 1500, 3000
DATA = np.random.random((R, C))
DATA[::2, :] *= -1 # make every other line negative
Yi, Xi = 1, 10 # increment
CMP = 'seismic'
ImageFormat ='pdf'
Name = 'Image'
DataRange = (np.absolute(DATA)).max() # I want my data centred on 0
EXTENT = [0, Xi*C, 0 ,Yi*R]
NORM = matplotlib.colors.Normalize(vmin =-DataRange, vmax= DataRange, clip =True)
for i in range(1,4):
Fig=plt.figure(figsize=(45, 10), dpi = 100*i, tight_layout=True)
Fig.suptitle(Name+str(i)+'00DPI')
ax = Fig.add_subplot(1, 1, 1)
Plot = ax.imshow(DATA, cmap=plt.get_cmap(CMP), norm = NORM, extent = EXTENT, aspect = 1, interpolation='none')
ax.set_xlabel('metres')
ax.set_ylabel('metres')
Fig.savefig(Name+str(i)+'00DPI.'+ImageFormat, format = ImageFormat, dpi = Fig.dpi)
plt.close()
、補間=「なし」または「最寄り」または私はショーを行う場合、私はそれは少なくともQt4をウィンドウになっていると思いますが、「バイリニア」何らかの理由で解像度を変更しません。 ()をsavefig()の代わりに使用します。 plt.figure(dpi =)で設定した値が保存された数値と同じ解像度であることに注意してください。
私はこのシステムでどのように動作するのか、私の理解の限界から考えています。どんな助けも大歓迎です。
ありがとうございます。
オプションをSVGとして保存していますか? 'plt.savefig(" test.svg ")' – Eric
私は垂直解像度に関してsvgとしての改善を見逃していません。 – Boorhin
イメージが正と負の値を垂直に交互に表示するようにコードを修正しました。主なアイデアは、イメージが完全に解決された場合、青と赤の水平ストライプを区別できることです。 – Boorhin