2017-04-24 21 views
3

非常に近い値を持つ点を描画するとき、異なる値を持つ点が同じ値を持つように見えることがあります。下の写真では、6つの点すべてに異なる縦座標値がありますが、点2,3と点4,5,6が同じ値を持つように見えます。点の描画精度を上げる

私はこれが解決の問題であることを認識しています(ここで詳述しない理由で増やすことはできません)。それでも、これらの点をより正確に描くようにmatplotlibに指示する可能性はありますか?

enter image description here

MWE:

import matplotlib 
from matplotlib import pyplot as plt 

coor = [[0.5,0.525,0.55,0.575,0.6,0.625],[0.5,0.501,0.502,0.503,0.504,0.505]] 

fig = plt.figure(figsize=(3.5,3.5)) 
plts=fig.add_subplot(1,1,1) 
fig.subplots_adjust(left=0.01, right=0.99, bottom=0.01, top=0.99, hspace=0, wspace=0) 

plts.set_xlim([0,1]) 
plts.set_ylim([0,1]) 
plts.get_xaxis().set_visible(False) 
plts.get_yaxis().set_visible(False) 

grph = plts.scatter(coor[0],coor[1],facecolor='k',marker='o',lw=0,s=25) 
fig.savefig('test.png', bbox_inches='tight', dpi=100) 
+0

変更軸の範囲を? – DavidG

+0

@DavidG残りの部分を補う他の点がありますので、私は限界を変更することはできません(まだここでは問題のあるもののみを提示しました) – Pygmalion

+0

'marker = '+''を設定すると、より正確に見えるかもしれませんが、解決の限界を回避することができます。 – kazemakase

答えて

3

問題は、100 dpiののresoltionから来ています。ドットの位置は1ピクセルの倍数である必要があるので、それらの位置は離散化して見える。

もちろん、画像を保存するときにdpiを増やすことはできます。以下は100 dpiで保存された元の画像で、望ましくない動作を示しています。

enter image description here

次のピクチャ300のDPIで保存され、その後、元の画像と同じサイズにダウンサンプリングされます。

enter image description here

あなたは figsize*saved_dpi/desired_dpi == integer結果はさらに良くなるようフィギュアのサイズを選択した場合は、あなたはbbox_inches='tight'の使用を控える必要があります。

+0

OK、PNGを例として使用しましたが、実際にはArtistAnimationを使用してビデオを作成しています。より高い解像度を作り、ArtistAnimationをビデオ作成中にダウンサンプリングすることは可能ですか? – Pygmalion

+0

私があなたのことを正しく理解していれば、 'matplotlib'のピクセル位置の信憑性は私たちが取り組むことのできないものです。多分ピクセル位置の不調和を取り除くことは素晴らしい 'matplotlib'拡張リクエストでしょうか? – Pygmalion

+0

ダウンサンプリングは、アニメーションの保存に使用するFileWriterによってサブクラス化したり、PILを使用したり、外部ライターにそれぞれの引数を設定したりして、行う必要があります。保存するフォーマットに応じて、これは実際には簡単で難しいかもしれません。 matplotlibの機能要求がある場合は、[GitHubサイト](https://github.com/matplotlib/matplotlib/issues)で尋ねることができます。 – ImportanceOfBeingErnest

関連する問題