2017-10-07 9 views
1
import numpy as np 
import matplotlib.pyplot as plt 
x = np.linspace(0, 10, 1000) 
y = np.ones(1000) 
plt.plot(x, y) 

ができます: enter image description herematplotlibが同様の値の配列の浮動小数点数をプロットするのを防ぐにはどうしたらいいですか?

しかし

import numpy as np 
import matplotlib.pyplot as plt 
x = np.linspace(0, 10, 1000) 
y = np.ones(1000) + np.random.normal(loc=0.0, scale=1E-12, size=1000) 
plt.plot(x, y) 

ができます: enter image description here

これは私がプロットに任意のキーワード引数を変更していないということで、予期しない動作のように思えます。配列値の中に浮動小数点のバリエーションがあっても、最初のyのように2番目のy値をプロットするにはどうすればよいですか?

+0

これは予期しない動作ではありませんか? – roganjosh

+0

あなたが予期せぬことであっても、それが他の人にとって予期しないことを意味するわけではありません。 – moorepants

+1

しかし、最初のグラフで私の生のデータを丸ごと丸めただけで、私はそれを求めないと非常に意外なことに気付くでしょう。私は孤立していませんでした。私はこれをあなたに予期せぬものにすることを理解したいと思います。 – roganjosh

答えて

1

[0.95, 1.05]から落ちてくるポイントを同じにしてトリミングしますか?デフォルトで

axes = plt.gca() 
axes.set_ylim([0.95, 1.05]) 

すべての点が表示されるように、matplotlibのは、(autoscaleを参照)は、xとyの範囲を設定します。

しかし、そうでない場合、matplotlib(またはその点ではnumpy)は、浮動小数点数が整数に十分に近い場合、浮動小数点数を切り捨てたり、丸めたりしません。これは間違った値を表示し、は実際にはです。

明示的、暗黙よりも優れている:

zen of Pythonがあることを指定します。

+0

これはプロットを修正し、解決策です。今度は、2番目のプロットにすべてのポイントを表示するためにyのリミットが自動スケールされているのに対して、最初のプロットは異なるルールでオートスケールされています。 – moorepants

+0

これは私の明白な質問に対する解決策です。ありがとう。 – moorepants

関連する問題