2017-05-04 12 views
0

matplotlibを使用してプロットすると、非常に不都合な量でy軸がスケーリングされるという興味深い問題が発生しました。ここでは、問題を示していMWEだ:私はこれを実行するとmatplotlibの基本軸の不具合

import numpy as np 
import matplotlib.pyplot as plt 

l = np.linspace(0.5,2,2**10) 
a = (0.696*l**2)/(l**2 - 9896.2e-9**2) 

plt.plot(l,a) 
plt.show() 

が、私はこのpicture

のように見える数字を取得するには、はっきりとyのデータがあるにもかかわらず、愚かな量によってスケーリングされ、y軸私はトンを移動する必要がありますなぜそれが私に意味をなさないことに Axis numerical offset in matplotlib

私はこの質問への答えに満足していないよ:すべて

1〜2これは質問に似ていますデータが1と2の間にあるとき(EDIT:0と1の間)、軸設定を変更する複雑なプロセスです。なぜこれが起こるのですか? matplotlibはなぜこのような奇妙なスケーリングを使用しますか?

+0

、Y-データがあります** not ** ** with 1 and 2.あなたの値は 'plt.ylim(0、2)'でも見られるようにほぼ一定です。だから私はそれを「愚かな量」と呼んでいません。 – Michael

+0

Ack私は間違ったコードをコピーしました。私はipythonを見ていて、ばかげたミスを犯しました。ごめんなさい!それにもかかわらず、私は問題がどこから来るのか不思議です。どのような状況においても、ラベルはそれほど有用ではありません。なぜmatplotlibがこれを行うのですか? –

+0

問題ありません!すべてが期待どおりに機能します。別の目盛りが必要な場合は、質問自体に正確に指定してください。 – ImportanceOfBeingErnest

答えて

0

このプロットのデータはすべて0.6960000000170.696000000273の間です。そのような場合には、何らかのオフセットを使用することが理にかなっています。

あなたは、あなたが自分のフォーマッタあなたを使用することができることを希望しない場合: `分(A)`と `MAX(A)を`てみ

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.ticker 

l = np.linspace(0.5,2,2**10) 
a = (0.696*l**2)/(l**2 - 9896.2e-9**2) 

plt.plot(l,a) 
fmt = matplotlib.ticker.StrMethodFormatter("{x:.12f}") 
plt.gca().yaxis.set_major_formatter(fmt) 
plt.show() 

enter image description here