我有一个包含多个数字的python脚本,我想在循环中更新。有些将是图像,其他将是线/散点图。我无法让图像显示在正确的图形上。 (线条和散点图数据显示在右图上,但图像似乎总是在最后创建的图形上,最终我将显示多个图像,所以我不能只创建图像图最后)
这里大致是我到目前为止的代码,3D散点图显示在图1中,但图3和线图都显示在图3中,图2为空白:
import matplotlib.pyplot as plt
from collections import deque
class Bla():
def __init__( self ):
self.pc_fig = plt.figure(1)
self.pc_ax = self.pc_fig.add_subplot(111, projection='3d')
self.pc_ax.set_xlim3d([0, 50])
self.pc_ax.set_ylim3d([0, 50])
self.pc_ax.set_zlim3d([0, 20])
self.pc_ax.hold(False)
self.vts_fig = plt.figure(2)
self.vts_ax = self.vts_fig.add_subplot(111)
self.em_fig = plt.figure(3)
self.em_ax = self.em_fig.add_subplot(111)
self.em_ax.hold(True)
self.image_data = deque()
self.motion_data = deque()
plt.ion()
plt.show()
def run( self ):
em_prev_xy = ( 0, 0 )
while True:
if len( self.motion_data ) > 0:
data1 = self.motion_data.popleft()
em_xy = data1.get_em()
self.em_ax.plot( [ em_prev_xy[0], em_xy[0] ], [ em_prev_xy[1], em_xy[1] ],'b')
pc = self.get_pc()
pc_index = nonzero(pc>.002)
pc_value = pc[pc_index] * 100
self.pc_ax.scatter(pc_index[0],pc_index[1],pc_index[2],s=pc_value)
self.pc_ax.set_xlim3d([0, 50])
self.pc_ax.set_ylim3d([0, 50])
self.pc_ax.set_zlim3d([0, 20])
plt.pause( 0.0001 ) # This is needed for the display to update
if len( self.image_data ) > 0:
im = self.image_data.popleft()
plt.imshow( im, cmap=plt.cm.gray, axes=self.vts_ax )
plt.pause( 0.0001 )
def main():
bla = Bla()
bla.run()
if __name__ == "__main__":
main()
基本上我有一些队列在新数据到达时会在回调中填充,我希望这些数据在到达时显示。
我是matplotlib的新手,所以任何有关我的图片显示问题的帮助或提示更好地使用matplotlib来显示数字的提示将非常感激
答案 0 :(得分:1)
您正在混合OO和状态机接口。有关正在进行的操作的说明,请参阅this answer。
替换此行:
plt.imshow( im, cmap=plt.cm.gray, axes=self.vts_ax )
带
the_axes_you_want.imshow(...)
应修复您的图片问题。