绘图数据在matplotlib中显示错误

时间:2015-10-15 21:01:19

标签: python python-3.x matplotlib

当新数据通过流转储到“twitter-out”时,为什么我的数据点会像这样显示?看起来它与动画有关,因为当我重新运行文件时没有在新数据中流式传输时,它就很好了。

enter image description here

    style.use('ggplot')

fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)

def animate(self):

    pullData = open("twitter-out.txt", "r").read()
    lines = pullData.split('\n')

    xar = []
    yar = []

    x = 0
    y = 0

    for l in lines[:]:
        x += 1
        if "['pos']" in l:
            y += 1
        elif "['neg']" in l:
            y -= 1

        xar.append(x)
        yar.append(y)

    ax1.plot(xar, yar,color='r')
    ax1.set_xlabel('Number of Tweets')
    ax1.set_ylabel('Sentiment')

ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()

1 个答案:

答案 0 :(得分:0)

修复1:

主要解决方法非常简单:只需在致电ax1.cla()之前添加ax1.plot()

说明:

你看到的原因是每次调用animate函数时动画都会绘制一个新的图,并将其叠加在所有以前的函数之上。 因此,您在问题中附加的数字实际上是从animate调用中抽取的十几个数字的叠加。 要解决此问题,您只需使用clear axes命令ax.cla()清除轴中包含的上一个图。

修复2:

水平条完全存在的原因是因为您的dataPulled字符串始终以新行结束,该行在列表line的末尾变成空字符串。 看那个例子:

>>> 'a\nb\n'.split('\n')
['a', 'b', '']

所以你必须在for循环中删除最后一个:

for l in lines[:-1]: