我试图使用OpenCV实时绘制来自摄像机的一些数据.但是,实时绘图(使用matplotlib)似乎不起作用.
我把这个问题分成了这个简单的例子:
fig = plt.figure()
plt.axis([0, 1000, 0, 1])
i = 0
x = list()
y = list()
while i < 1000:
temp_y = np.random.random()
x.append(i)
y.append(temp_y)
plt.scatter(i, temp_y)
i += 1
plt.show()
Run Code Online (Sandbox Code Playgroud)
我希望这个例子可以单独绘制1000个点.实际发生的是窗口弹出第一个点显示(确定),然后在填充图表的其余部分之前等待循环完成.
有什么想法,为什么我没有看到一次填充一个点?
我在这里重新绘制数字时遇到问题.我允许用户在时间刻度(x轴)中指定单位,然后重新计算并调用此函数plots().我希望情节简单地更新,而不是在图中附加另一个情节.
def plots():
global vlgaBuffSorted
cntr()
result = collections.defaultdict(list)
for d in vlgaBuffSorted:
result[d['event']].append(d)
result_list = result.values()
f = Figure()
graph1 = f.add_subplot(211)
graph2 = f.add_subplot(212,sharex=graph1)
for item in result_list:
tL = []
vgsL = []
vdsL = []
isubL = []
for dict in item:
tL.append(dict['time'])
vgsL.append(dict['vgs'])
vdsL.append(dict['vds'])
isubL.append(dict['isub'])
graph1.plot(tL,vdsL,'bo',label='a')
graph1.plot(tL,vgsL,'rp',label='b')
graph2.plot(tL,isubL,'b-',label='c')
plotCanvas = FigureCanvasTkAgg(f, pltFrame)
toolbar = NavigationToolbar2TkAgg(plotCanvas, pltFrame)
toolbar.pack(side=BOTTOM)
plotCanvas.get_tk_widget().pack(side=TOP)
Run Code Online (Sandbox Code Playgroud) 如何向现有图表添加点?直接的解决方案是绘制新的散点图,添加新数据。
ax.scatter(data[:,0], data[:,1], cmap = cmap, c = color_data)
ax.scatter(new_points_x, new_points_y, color='blue')
Run Code Online (Sandbox Code Playgroud)
但是如果我们想用新的颜色添加更多的点,就有一个问题:我们必须考虑所有以前添加的点。
如果我可以使用像这样的特殊功能,那就太好了
AddPoint(ax, new_point, color)
Run Code Online (Sandbox Code Playgroud)
我只想添加新颜色的新点。我不需要任何动画
我正在寻找类似于带有 blit 的FuncAnimation 的东西,但不是让库在固定的时间步调用一个函数,我想在准备好时自己调用该函数。我不明白 matplotlib 对函数返回的轴做了什么来更新它们。我正在处理来自外部来源的实时数据,我希望刷新率与该数据同步。
我想使用 MatPlotLib 绘制图形,其中的图形随时间变化。在每个时间步,一个额外的数据点将被添加到图中。但是,应该只显示一个图形,其外观会随着时间的推移而演变。
在我的测试示例中,该图是一个简单的线性图 (y = x)。这是我尝试过的:
for i in range(100):
x = range(i)
y = range(i)
plt.plot(x, y)
plt.ion()
plt.show()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
但是,这里发生的是创建了多个窗口,因此在循环结束时我有 100 个窗口。另外,我注意到对于最近的窗口,它只是一个白色的窗口,并且情节只出现在下一步中。
所以,我的两个问题是:
1) 如何更改我的代码,以便只显示一个窗口,其内容会随着时间而变化?
2)如何更改我的代码,以便在最近的时间步长中,绘图实际显示在窗口上,而不是只显示一个白色窗口?
谢谢!
我是使用PyLab的新手。我想画点。但是我不想显示先前的点,即随着新点的出现,先前绘制的点将消失而新点将被绘制。我进行了很多搜索,但找不到如何重新初始化之间的绘图。我面临的问题是我可以使用plt.figure(f1.number)设置当前图形,但是在该图形上绘制点之后,它将永久更改。
我正在监视串口并尝试在Matplotlib到达时绘制数据.因为数据是以不规则的间隔到达的,所以我使用的方法来附加数据 - 类似于这个线程.
这是我的代码:
data = np.zeros(shape=(1,1), dtype=[('millis',float),('temperature_Celsius',float),('relative_humidity',float),('setpoint',float),('relay_status',float)])
print data # gives a 1-row, 5-element tuple: [[(0.0, 0.0, 0.0, 0.0, 0.0)]]
# append the new row
# throws error regarding array dimensions
data = np.vstack(( data, [(1,2,3,4,5)] ))
Run Code Online (Sandbox Code Playgroud)
我无法正确获得尺寸标注,因为我收到以下错误:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Run Code Online (Sandbox Code Playgroud)
请帮助识别语法错误.
在Python 2.6,Numpy 1.8,Windows 7上运行.
python ×7
matplotlib ×6
numpy ×1
plot ×1
real-time ×1
scatter-plot ×1
tkinter ×1
while-loop ×1