【问题标题】:How to redraw a python plot after raw_input如何在 raw_input 之后重绘 python 图
【发布时间】:2016-02-19 23:03:34
【问题描述】:

我试图通过按顺序添加函数来组成一个情节。这个想法是在按下一个键后添加每个新行。在 Matlab 中很容易完成,但在 Python 中让我很头疼。

我的示例代码丢失:

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 2.0, 0.01)

#plt.ion()

plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.title('About as simple as it gets, folks')
plt.grid(True)
#plt.show()

for n in [1,2,3,4,5,6]:
    s = np.sin(2*np.pi*t-n*np.pi/3)
    plt.plot(t, s)
    #plt.show()
    plt.draw()
    raw_input('press a key')

此代码仅打印“按一个键”6 次。然而,当我注释掉 "raw_input('press a key')" 行时,该图形会立即绘制出来。

我试过 plt.ion(),没有帮助。另外,如果我使用 plt.show() 或 plt.draw() 也没有区别。

我被困在这里...我做错了什么?

有人可以建议一个(最好是简单的)解决方案吗?

【问题讨论】:

  • 我使用的是 python 3,所以可能无法完美重现您的问题。我观察到的是,我需要drawshow 才能绘制图形。注释掉任何一个,什么都没有画出来。顺便说一句,n*pi/3pi 中的未定义。你的意思可能是np.pi
  • 是的,你是对的,这是一个错字,应该是“np.pi”(我会更正原帖。)。不过,在我的情况下,如果我使用“draw”、“show”或两者都用,这并不重要。结果总是一样的。打印六次“按键”消息,最后一次绘制整个画面。顺便说一句,我使用的是 Python 2.7.8。

标签: python matplotlib


【解决方案1】:

尝试增加时间,它应该可以工作。

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

t = np.arange(0.0, 2.0, 0.01)

plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.title('About as simple as it gets, folks')
plt.grid(True)
plt.ion()
plt.show()

for n in [1,2,3,4,5,6]:
    s = np.sin(2*np.pi*t-n*np.pi/3)
    plt.plot(t, s)
    plt.draw()
    time.sleep(0.05)
    raw_input('press a key')

【讨论】:

  • 它仍然不起作用...即使我删除了raw_input('press a key') 行,它也只是等待 6*N 秒(whee time.sleep(N))并立即绘制整个图形
  • 顺便说一句,当我从命令行python test.py 调用脚本时,我发现它可以工作,但是从 Spyder 控制台启动时它不起作用。我正在使用 Spyder 2.2.4
  • 我不使用Spider,所以我不知道。但该脚本适用于 python。抱歉,Borris,帮不上忙。
猜你喜欢
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多