我试图通过迭代逐个绘制数据集的特征。 所以我希望图表能够在循环中不断更新。
我参考了这个帖子,real-time plotting in while loop with matplotlib但是答案到处都是,尽管如下所示加入了他们的一些建议,我仍然无法使代码正常工作。我正在使用Jupyter Notebook。
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
colors = ["darkblue", "darkgreen"]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True, sharex = True)
for i in range(X.shape[-1]-1):
idx = np.where(y == 1)[0]
ax1.scatter(X[idx, i], X[idx, i+1], color=colors[0], label=1)
idx = np.where(y == 0)[0]
ax2.scatter(X[idx, i], X[idx, i+1], color=colors[1], label=0)
plt.draw()
plt.pause(0.0001)
有什么建议吗?
谢谢。
答案 0 :(得分:2)
对于动画,您需要一个交互式后端。 %matplotlib inline
不是交互式后端(它基本上显示了该图的打印版本)。
您可能决定不在jupyter中运行代码,而是作为脚本运行。在这种情况下,您需要将plt.ion()
置于交互模式上。
另一种选择是使用FuncAnimation
,例如this example。要在Jupyter中运行此类FuncAnimation
,您仍需要一些交互式后端,%matplotlib tk
或%matplotlib notebook
。
从matplotlib 2.1开始,我们还可以使用JavaScript创建动画。
from IPython.display import HTML
HTML(ani.to_jshtml())
一些完整的例子:
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
t = np.linspace(0,2*np.pi)
x = np.sin(t)
fig, ax = plt.subplots()
ax.axis([0,2*np.pi,-1,1])
l, = ax.plot([],[])
def animate(i):
l.set_data(t[:i], x[:i])
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))
from IPython.display import HTML
HTML(ani.to_jshtml())
答案 1 :(得分:2)
这是Jupyter笔记本中实时绘图的示例
%matplotlib inline
%load_ext autoreload #Reload all modules every time before executing the Python code typed.
%autoreload 2
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
import time
colors = ["darkblue", "darkgreen"]
# initialise the graph and settings
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = fig.add_subplot(211)
plt.ion() # interactive mode
fig.show()
fig.canvas.draw() # matplotlib canvas drawing
# plotting loop
for i in range(X.shape[-1]-1):
ax1.clear()
ax2.clear()
idx = np.where(y == 1)[0]
ax1.scatter(X[idx, i], X[idx, i+1], color=colors[0], label=1)
idx = np.where(y == 0)[0]
ax2.scatter(X[idx, i], X[idx, i+1], color=colors[1], label=0)
fig.canvas.draw() # draw
time.sleep(0.5) # sleep