如何选择使用matplotlib显示图像的图形

时间:2013-06-06 19:47:59

标签: image python-2.7 matplotlib figure

我有一个包含多个数字的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来显示数字的提示将非常感激

1 个答案:

答案 0 :(得分:1)

您正在混合OO和状态机接口。有关正在进行的操作的说明,请参阅this answer

替换此行:

plt.imshow( im, cmap=plt.cm.gray, axes=self.vts_ax )

the_axes_you_want.imshow(...)

应修复您的图片问题。