Ale*_*lex 2 python matplotlib noise
您好,我创建了一个程序,该程序将产生与真实轨迹的偏差,它很复杂,不幸的是我没有一个简单的例子。
它根据实际路径计算具有随机初始条件的路径,并进行 x 次迭代,目的是表明偏差在次数越多时变得越大。
然而我想表明的是,时间越长,偏差就越大。当然,我可以计算方差并在每个时间步绘制mean+var和mean-var,但我想知道是否可以使用hist2d绘制这样的东西
您会发现这些块不像同类那样光滑,这不太好用。
然后我去看了python的kde并创建了以下内容。
这也不是优选的,因为我认为它在最小值和最大值处存储了更多点。而且它也“太涂抹了”。特别是在开始时,所有点都是相同的,所以我希望有一条直线来真正表明偏差是稍后开始的。
我想我的问题是;是我想要的,甚至是可能的,我应该使用什么包/命令。我在其他问题上没有找到我要找的东西。或者有人建议以其他方式很好地展示我想要的东西?
这是一个绘制多条透明曲线的想法:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
for _ in range(1000):
plt.plot(x, np.sin(x * np.random.normal(1, 0.1)) * np.random.normal(1, 0.1), color='r', alpha=0.02)
plt.plot(x, np.sin(x), color='b')
plt.margins(x=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)
另一个选项创建二维直方图:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
all_curves = np.array([np.sin(x * np.random.normal(1, 0.1)) * np.random.normal(1, 0.1) for _ in range(100)])
plt.hist2d(x=np.tile(x, all_curves.shape[0]), y=all_curves.ravel(), bins=(100, 100), cmap='inferno')
plt.show()
Run Code Online (Sandbox Code Playgroud)
还有另一种方法将fill_between在置信区间之间使用(如@bramb建议):
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
all_curves = np.array([np.sin(x * np.random.normal(1, 0.1)) * np.random.normal(1, 0.1) for _ in range(1000)])
confidence_interval1 = 95
confidence_interval2 = 80
confidence_interval3 = 50
for ci in [confidence_interval1, confidence_interval2, confidence_interval3]:
low = np.percentile(all_curves, 50 - ci / 2, axis=0)
high = np.percentile(all_curves, 50 + ci / 2, axis=0)
plt.fill_between(x, low, high, color='r', alpha=0.2)
plt.plot(x, np.sin(x), color='b')
plt.margins(x=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |