首页 > 其他 > 详细

matplotlib画动态散点图

时间:2014-10-30 22:41:14      阅读:734      评论:0      收藏:0      [点我收藏+]
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np

class AnimatedScatter(object):
 """An animated scatter plot using matplotlib.animations.FuncAnimation."""
 def __init__(self, numpoints=50):
  self.numpoints = numpoints
  self.stream = self.data_stream()

  # Setup the figure and axes...
  self.fig, self.ax = plt.subplots()
  # Then setup FuncAnimation.
  self.ani = animation.FuncAnimation(self.fig, self.update, interval=5, 
           init_func=self.setup_plot, blit=True)

 def setup_plot(self):
  """Initial drawing of the scatter plot."""
  x, y, s, c = next(self.stream)
  self.scat = self.ax.scatter(x, y, c=c, s=s, animated=True)
  self.ax.axis([-10, 10, -10, 10])

  # For FuncAnimation's sake, we need to return the artist we'll be using
  # Note that it expects a sequence of artists, thus the trailing comma.
  return self.scat,

 def data_stream(self):
  """Generate a random walk (brownian motion). Data is scaled to produce
  a soft "flickering" effect."""
  data = np.random.random((4, self.numpoints))
  xy = data[:2, :]
  s, c = data[2:, :]
  xy -= 0.5
  xy *= 10
  while True:
   xy += 0.03 * (np.random.random((2, self.numpoints)) - 0.5)
   s += 0.05 * (np.random.random(self.numpoints) - 0.5)
   c += 0.02 * (np.random.random(self.numpoints) - 0.5)
   yield data

 def update(self, i):
  """Update the scatter plot."""
  data = next(self.stream)

  # Set x and y data...
  self.scat.set_offsets(data[:2, :])
  # Set sizes...
  self.scat._sizes = 300 * abs(data[2])**1.5 + 100
  # Set colors..
  self.scat.set_array(data[3])

  # We need to return the updated artist for FuncAnimation to draw..
  # Note that it expects a sequence of artists, thus the trailing comma.
  return self.scat,

 def show(self):
  plt.show()

if __name__ == '__main__':
 a = AnimatedScatter()
 a.show()

一个简单的例子:

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

def main():
 numframes = 100
 numpoints = 10
 color_data = np.random.random((numframes, numpoints))
 x, y, c = np.random.random((3, numpoints))

 fig = plt.figure()
 scat = plt.scatter(x, y, c=c, s=100)

 ani = animation.FuncAnimation(fig, update_plot, frames=xrange(numframes),
         fargs=(color_data, scat))
 plt.show()

def update_plot(i, data, scat):
 scat.set_array(data[i])
 return scat,

main()


matplotlib画动态散点图

原文:http://blog.csdn.net/yapian8/article/details/40627505

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!