Python:公式图表平滑但给出“锯齿状”输出?

时间:2015-07-22 14:22:34

标签: python ipython-notebook

我正在使用python 2.7,交互式笔记本。

当我绘制这段代码时......

plt.xlabel('Frame')
plt.ylabel('Iterations')
x = np.arange(-10000., 10000., 1)
y = (np.rint((-np.sin(x/88)+x*0.0027)*26.2))-5
y = np.clip(y, 0, 200)
plt.axis([0, 1500, -4, 100])
plt.plot(x, y, linewidth=0.5, color='g')
plt.grid()
plt.show()

我得到了一张非常漂亮的图表。

见到这里

Smooth graph

但是当我将这个应用到我试图平滑改变的迭代次数时,使用此代码四舍五入到最近的整数:

frame_i = 1
nrframes = 1500
for i in xrange(frame_i, nrframes):
    actualiter = (-np.sin(frame_i/88)+frame_i*0.0027)*26.2 #Iteration Bouncy Curve
    actualiter = np.clip(actualiter, 0, 200)
    plt.plot([frame_i],[actualiter], 'ro')
    plt.axis([0, 1500, 0, 100])
    frame_i = frame_i + 1
plt.show()

我在这里看到一个非常锯齿状的输出

Jagged graph

有谁知道为什么?我应用于计算代码中的数字时,我的一些其他功能也“似乎”非常“锯齿”

y = -(cos(x/10)*0.007)+0.0029
y = -(cos(x/25)*1)

1 个答案:

答案 0 :(得分:1)

在你的第一个例子中x是一个浮点数,所以(x/88)产生一个浮点数并且你有一个连续可变的sin函数:
[sin(0.114), sin(0.227), sin(0.341)... etc.]

在你的第二个中,frame_i是一个int,所以(frame_i/88)被执行为整数除法,因此你的sin函数有步骤:
[sin(0), sin(0), .... , sin(0), sin(1), sin(1),... etc.]

更改为8888.0会强制浮动分割,然后再次获得平滑的正弦波。

enter image description here