2017-01-10 8 views
0

親愛なるstackoverflowコミュニティ!python imshowピクセルサイズはプロット内で変化します

私は、imshowを使ってPythonで2Dマップをプロットする必要があります。

plt.savefig('rdv_cr%s_cmlon%s_ux.png' % (2097, cmlon_ref)) 

をたどり、

image2d_problem

問題は、プロットにズームするとき、1があることに気づくことができるということです

のように見えるとして使用するコマンドは、画像がその後、保存されている

plt.imshow(ux_map, interpolation='none', origin='lower', extent=[lonhg_all.min(), lonhg_all.max(), lathg_all.min(), lathg_all.max()]) 

ですピクセルは異なる形状(例えば異なる幅)を有する。

enter image description here

この動作のための任意の理由がある:これは、(第1の画像の上部領域から採取された)以下のズーム部分に示されていますか?自分のデータの長方形のグリッドを入力しますが、問題はデータそのものとは関係ありません。代わりに、おそらくレンダリングに関連するものです。私はすべてのピクセルが等しい形状であることを期待していますが、見ることができるように、それらは高さだけでなく幅も異なります。ちなみに、これはmatplotlibのインタラクティブなプロットでも発生します。しかし、そこをズームインすると、突然同じ形になります。

https://github.com/matplotlib/matplotlib/issues/3057/とリンクが関連しているかどうかはわかりませんが、dpi値で試してみることができます。いずれにしても、なぜこのようなことが起こったのか誰かが知っていれば、その人が上のコマンドを使ってコンピュータが意図したとおりにプロットを表示できない理由を説明することができますか?

ありがとうございました!

答えて

2

これは、画像が画面にマッピングされる方法に関連しています。スクリーン内のピクセルの色を決定するために、対応する色が画像からサンプリングされる。画面領域と画像サイズが一致しない場合、アップサンプリング(画像が小さすぎる)またはダウンサンプリング(画像が大きすぎる)のいずれかが発生します。

あなたはアップサンプリングのケースを観察しました。たとえば、画面上の6x6ピクセルの領域に4x4イメージを描画することを検討してください。場合によっては、2つの画面ピクセルが画像ピクセルに、時には1つだけになることがあります。ここでは、異なるサイズのピクセルの極端な場合を観察します。

Sampling

あなたはインタラクティブなビューにズームインすると、この効果はdisapearているようです。これは、突然画像を多数のピクセルにマップするためです。 1つの画像ピクセルが、例えば10スクリーンピクセルに拡大され、別の画像ピクセルが11に拡大される場合、その違いをほとんど気付かない。この効果は、画像が画面解像度にほぼ一致するときに最も顕著になります。

この効果を回避するソリューションは、望ましくないぼやけた外観につながる補間を使用することです。ぼかしを軽減するには、...

  • 異なる補間機能で再生します。たとえば、画像内の各ピクセルを同じ色のピクセルのブロックに置き換えるなどして定数ファクタで画像をアップスケールするか、またはアップスケールで画像をアップスケールします(例:'kaiser'

  • )。ぼかしは、ブロックのエッジにのみ影響します。

+0

dpi設定はどうですか?ファイルをpdf(または他のベクトルグラフィックフォーマット)として保存するのが助かりますか?私は画像ができるだけデータに密接に関連するように補間アルゴリズムを避けたいと思います。 – bproxauf

+0

高いdpi設定は、ベクターグラフィックスフォーマットにも役立ちます。両方とも、基本的に、データをビューアアプリケーションに「正しく」表示するという問題を転送します。個人的には、私はベクトルグラフィックを好む。そうすれば、グラフィックを見ている人は誰でも自分の喜びでズームインしたりズームアウトしたりすることができます。画像が画面1:1にマップされていなければ、問題になります。 – kazemakase

関連する問題