{ "metadata": {}, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "\"\"\"\n", "Matplotlib Animation Example\n", "\n", "author: Jake Vanderplas\n", "email: vanderplas@astro.washington.edu\n", "website: http://jakevdp.github.com\n", "license: BSD\n", "Please feel free to use and modify this, but keep the above information. Thanks!\n", "\"\"\"\n", "# reference: http://matplotlib.sourceforge.net/api/animation_api.html\n", "from brian2 import *\n", "import numpy as np\n", "import mpl_toolkits.mplot3d.axes3d as p3\n", "from matplotlib import pyplot as plt\n", "from matplotlib import animation\n", "import h5py\n", "\n", "class Anim3dScatterPlot:\n", " plottingTimeRange = 300# ms to show at a time\n", " def openHdf5(self, hdf5name , permision = \"w\"):\n", " self.hdf = h5py.File(hdf5name, permision)\n", "\n", " def closeHdf5(self):\n", " self.hdf.close()\n", "\n", " def getData(self, group, level ):\n", "\n", " return self.hdf['/'+group+'/'+str(level)]\n", "\n", " def getDownsampleData(self, group, start, end , screenSize = 1024):\n", " bestLevel = 1\n", " data = self.getData(group,bestLevel)\n", " print group + \" has been downsampled \"+ str(bestLevel) + \" times\"\n", " start = int(start/bestLevel)\n", " end = int(end/bestLevel)\n", " if (end > data.shape[0]):\n", " print data.shape\n", " print \"WARNING: you requested end = \"+str(float(end))+\" seconds but data length is \"+str(float(data.shape[0] *bestLevel/10000))+\" seconds\"\n", " end=data.shape[0] -1\n", "\n", " return data[start:end]\n", "\n", " def incorperateData(self, group, start, end):\n", "\n", " #because timestep is 0.1 mseconds, and start and end is expressed in seconds.\n", " start = int(start * 10000)\n", " end = int(end * 10000)\n", "\n", " voltage = self.getDownsampleData('voltage', start, end)\n", " spikes = self.getDownsampleData('spikes', start, end) \n", "\n", " return voltage, spikes\n", "\n", " def create3dAnim(self):\n", " plottingTimeRange = self.plottingTimeRange\n", " self.openHdf5('simulation.hdf5',permision = \"r\")\n", " start = .001 #seconds\n", " end = .3#.13\n", " voltage, spikes = self.incorperateData('voltage',start,end)\n", " times = np.array(range(0,len(voltage)))*.001\n", "\n", " # Attaching 3D axis to the figure\n", " fig = plt.figure()\n", " ax = p3.Axes3D(fig)\n", "\n", " # Setting the axes properties\n", " ax.set_xlim3d([0.0, 3.0])\n", " ax.set_xlabel('Neuron')\n", " ax.set_ylim3d([-0.03, 0.3])\n", " ax.set_ylabel('Time in ms*10')\n", " ax.set_zlim3d([-70.0, 15.0])\n", " ax.set_zlabel('Voltage')\n", " ax.set_title('Neuron voltage')\n", " ax.view_init(elev=15.0, azim=-10)\n", "\n", " c = np.array([[0],[0],[0],[0]])\n", " line = ax.plot(c[0, 0:1],c[1, 0:1],c[2, 0:1], lw=4)[0]\n", " line2 = ax.plot(c[0, 0:1],c[1, 0:1],c[2, 0:1], lw=4)[0]\n", " line3 = ax.plot(c[0, 0:1],c[1, 0:1],c[2, 0:1], lw=4)[0]\n", " line4 = ax.plot(c[0, 0:1],c[1, 0:1],c[2, 0:1], lw=4)[0]\n", " xVals = np.array([[0.0]*plottingTimeRange,[1]*plottingTimeRange,[2]*plottingTimeRange,[3]*plottingTimeRange])\n", "\n", " def generateLine(timePoint):\n", " timePointEnd = timePoint+plottingTimeRange\n", " line.set_data(xVals[0],times[0:plottingTimeRange])\n", " line.set_3d_properties(transpose(voltage)[0][timePoint:timePointEnd])\n", " line2.set_data(xVals[1],times[0:plottingTimeRange])\n", " line2.set_3d_properties(transpose(voltage)[1][timePoint:timePointEnd])\n", " line3.set_data(xVals[2],times[0:plottingTimeRange])\n", " line3.set_3d_properties(transpose(voltage)[2][timePoint:timePointEnd])\n", " line4.set_data(xVals[3],times[0:plottingTimeRange])\n", " line4.set_3d_properties(transpose(voltage)[3][timePoint:timePointEnd])\n", "\n", " if timePoint == 100 or timePoint == 200 or timePoint == 400 or timePoint == 600 or timePoint == 800:\n", " print 'rendering timePoint:\\t',timePoint\n", "\n", " line_ani = animation.FuncAnimation(fig, generateLine, frames=1000, interval=.01, blit=False)\n", " ext = 'mp4'\n", " fps = 30\n", " codec = {'mp4': 'libx264', 'webm': 'libvpx'}.get(ext, 'mpeg4')\n", " line_ani.save('testVoltage.mp4', fps=30, extra_args=['-vcodec', 'libx264'])\n", "\n", " plt.show()\n", "\n", " def __init__(self):\n", " self.create3dAnim()\n", " self.closeHdf5\n", "\n", "def main():\n", " run3dAnim = Anim3dScatterPlot()\n", "\n", "if __name__ =='__main__':main()\n", "\n", "print 'done'" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }