In [1]:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib import animation
from IPython.display import FileLinks

In [2]:
from glob import glob
from termcolor import colored as c, cprint
from pprint import pprint
import numpy as np
import pickle

In [4]:
data_files = list(np.sort(glob('dumps/xys_*.dump.pkl')))
pprint(data_files)


['dumps/xys_000000.dump.pkl',
 'dumps/xys_000100.dump.pkl',
 'dumps/xys_000200.dump.pkl',
 'dumps/xys_000300.dump.pkl',
 'dumps/xys_000400.dump.pkl',
 'dumps/xys_000500.dump.pkl',
 'dumps/xys_000600.dump.pkl',
 'dumps/xys_000700.dump.pkl',
 'dumps/xys_000800.dump.pkl',
 'dumps/xys_000900.dump.pkl',
 'dumps/xys_001000.dump.pkl',
 'dumps/xys_001100.dump.pkl',
 'dumps/xys_001200.dump.pkl',
 'dumps/xys_001300.dump.pkl',
 'dumps/xys_001400.dump.pkl',
 'dumps/xys_001500.dump.pkl',
 'dumps/xys_001600.dump.pkl',
 'dumps/xys_001700.dump.pkl',
 'dumps/xys_001800.dump.pkl',
 'dumps/xys_001900.dump.pkl',
 'dumps/xys_002000.dump.pkl',
 'dumps/xys_002100.dump.pkl',
 'dumps/xys_002200.dump.pkl',
 'dumps/xys_002300.dump.pkl',
 'dumps/xys_002400.dump.pkl',
 'dumps/xys_002500.dump.pkl',
 'dumps/xys_002600.dump.pkl',
 'dumps/xys_002700.dump.pkl',
 'dumps/xys_002800.dump.pkl',
 'dumps/xys_002900.dump.pkl',
 'dumps/xys_003000.dump.pkl',
 'dumps/xys_003100.dump.pkl',
 'dumps/xys_003200.dump.pkl',
 'dumps/xys_003300.dump.pkl',
 'dumps/xys_003400.dump.pkl',
 'dumps/xys_003500.dump.pkl',
 'dumps/xys_003600.dump.pkl',
 'dumps/xys_003700.dump.pkl',
 'dumps/xys_003800.dump.pkl',
 'dumps/xys_003900.dump.pkl',
 'dumps/xys_004000.dump.pkl',
 'dumps/xys_004100.dump.pkl',
 'dumps/xys_004200.dump.pkl',
 'dumps/xys_004300.dump.pkl',
 'dumps/xys_004400.dump.pkl',
 'dumps/xys_004500.dump.pkl',
 'dumps/xys_004600.dump.pkl',
 'dumps/xys_004700.dump.pkl',
 'dumps/xys_004800.dump.pkl',
 'dumps/xys_004900.dump.pkl',
 'dumps/xys_005000.dump.pkl',
 'dumps/xys_005100.dump.pkl',
 'dumps/xys_005200.dump.pkl',
 'dumps/xys_005300.dump.pkl',
 'dumps/xys_005400.dump.pkl',
 'dumps/xys_005500.dump.pkl',
 'dumps/xys_005600.dump.pkl',
 'dumps/xys_005700.dump.pkl',
 'dumps/xys_005800.dump.pkl',
 'dumps/xys_005900.dump.pkl',
 'dumps/xys_006000.dump.pkl',
 'dumps/xys_006100.dump.pkl',
 'dumps/xys_006200.dump.pkl',
 'dumps/xys_006300.dump.pkl',
 'dumps/xys_006400.dump.pkl',
 'dumps/xys_006500.dump.pkl',
 'dumps/xys_006600.dump.pkl',
 'dumps/xys_006700.dump.pkl',
 'dumps/xys_006800.dump.pkl',
 'dumps/xys_006900.dump.pkl',
 'dumps/xys_007000.dump.pkl',
 'dumps/xys_007100.dump.pkl',
 'dumps/xys_007200.dump.pkl',
 'dumps/xys_007300.dump.pkl',
 'dumps/xys_007400.dump.pkl',
 'dumps/xys_007500.dump.pkl',
 'dumps/xys_007600.dump.pkl',
 'dumps/xys_007700.dump.pkl',
 'dumps/xys_007800.dump.pkl',
 'dumps/xys_007900.dump.pkl',
 'dumps/xys_008000.dump.pkl',
 'dumps/xys_008100.dump.pkl',
 'dumps/xys_008200.dump.pkl',
 'dumps/xys_008300.dump.pkl',
 'dumps/xys_008400.dump.pkl',
 'dumps/xys_008500.dump.pkl',
 'dumps/xys_008600.dump.pkl',
 'dumps/xys_008700.dump.pkl',
 'dumps/xys_008800.dump.pkl',
 'dumps/xys_008900.dump.pkl',
 'dumps/xys_009000.dump.pkl',
 'dumps/xys_009100.dump.pkl',
 'dumps/xys_009200.dump.pkl',
 'dumps/xys_009300.dump.pkl',
 'dumps/xys_009400.dump.pkl',
 'dumps/xys_009500.dump.pkl',
 'dumps/xys_009600.dump.pkl',
 'dumps/xys_009700.dump.pkl',
 'dumps/xys_009800.dump.pkl',
 'dumps/xys_009900.dump.pkl',
 'dumps/xys_010000.dump.pkl',
 'dumps/xys_010100.dump.pkl',
 'dumps/xys_010200.dump.pkl',
 'dumps/xys_010300.dump.pkl',
 'dumps/xys_010400.dump.pkl',
 'dumps/xys_010500.dump.pkl',
 'dumps/xys_010600.dump.pkl',
 'dumps/xys_010700.dump.pkl',
 'dumps/xys_010800.dump.pkl',
 'dumps/xys_010900.dump.pkl',
 'dumps/xys_011000.dump.pkl',
 'dumps/xys_011100.dump.pkl',
 'dumps/xys_011200.dump.pkl',
 'dumps/xys_011300.dump.pkl',
 'dumps/xys_011400.dump.pkl',
 'dumps/xys_011500.dump.pkl',
 'dumps/xys_011600.dump.pkl',
 'dumps/xys_011700.dump.pkl',
 'dumps/xys_011800.dump.pkl',
 'dumps/xys_011900.dump.pkl',
 'dumps/xys_012000.dump.pkl',
 'dumps/xys_012100.dump.pkl',
 'dumps/xys_012200.dump.pkl',
 'dumps/xys_012300.dump.pkl',
 'dumps/xys_012400.dump.pkl',
 'dumps/xys_012500.dump.pkl',
 'dumps/xys_012600.dump.pkl',
 'dumps/xys_012700.dump.pkl',
 'dumps/xys_012800.dump.pkl',
 'dumps/xys_012900.dump.pkl',
 'dumps/xys_013000.dump.pkl',
 'dumps/xys_013100.dump.pkl',
 'dumps/xys_013200.dump.pkl',
 'dumps/xys_013300.dump.pkl',
 'dumps/xys_013400.dump.pkl',
 'dumps/xys_013500.dump.pkl',
 'dumps/xys_013600.dump.pkl',
 'dumps/xys_013700.dump.pkl',
 'dumps/xys_013800.dump.pkl',
 'dumps/xys_013900.dump.pkl',
 'dumps/xys_014000.dump.pkl',
 'dumps/xys_014100.dump.pkl',
 'dumps/xys_014200.dump.pkl',
 'dumps/xys_014300.dump.pkl',
 'dumps/xys_014400.dump.pkl',
 'dumps/xys_014500.dump.pkl',
 'dumps/xys_014600.dump.pkl',
 'dumps/xys_014700.dump.pkl',
 'dumps/xys_014800.dump.pkl',
 'dumps/xys_014900.dump.pkl',
 'dumps/xys_015000.dump.pkl',
 'dumps/xys_015100.dump.pkl',
 'dumps/xys_015200.dump.pkl',
 'dumps/xys_015300.dump.pkl',
 'dumps/xys_015400.dump.pkl',
 'dumps/xys_015500.dump.pkl',
 'dumps/xys_015600.dump.pkl',
 'dumps/xys_015700.dump.pkl',
 'dumps/xys_015800.dump.pkl',
 'dumps/xys_015900.dump.pkl',
 'dumps/xys_016000.dump.pkl',
 'dumps/xys_016100.dump.pkl',
 'dumps/xys_016200.dump.pkl',
 'dumps/xys_016300.dump.pkl',
 'dumps/xys_016400.dump.pkl',
 'dumps/xys_016500.dump.pkl',
 'dumps/xys_016600.dump.pkl',
 'dumps/xys_016700.dump.pkl',
 'dumps/xys_016800.dump.pkl',
 'dumps/xys_016900.dump.pkl',
 'dumps/xys_017000.dump.pkl',
 'dumps/xys_017100.dump.pkl',
 'dumps/xys_017200.dump.pkl',
 'dumps/xys_017300.dump.pkl',
 'dumps/xys_017400.dump.pkl',
 'dumps/xys_017500.dump.pkl',
 'dumps/xys_017600.dump.pkl',
 'dumps/xys_017700.dump.pkl',
 'dumps/xys_017800.dump.pkl',
 'dumps/xys_017900.dump.pkl',
 'dumps/xys_018000.dump.pkl',
 'dumps/xys_018100.dump.pkl',
 'dumps/xys_018200.dump.pkl',
 'dumps/xys_018300.dump.pkl',
 'dumps/xys_018400.dump.pkl',
 'dumps/xys_018500.dump.pkl',
 'dumps/xys_018600.dump.pkl',
 'dumps/xys_018700.dump.pkl',
 'dumps/xys_018800.dump.pkl',
 'dumps/xys_018900.dump.pkl',
 'dumps/xys_019000.dump.pkl',
 'dumps/xys_019100.dump.pkl',
 'dumps/xys_019200.dump.pkl',
 'dumps/xys_019300.dump.pkl',
 'dumps/xys_019400.dump.pkl',
 'dumps/xys_019500.dump.pkl',
 'dumps/xys_019600.dump.pkl',
 'dumps/xys_019700.dump.pkl',
 'dumps/xys_019800.dump.pkl',
 'dumps/xys_019900.dump.pkl',
 'dumps/xys_020000.dump.pkl',
 'dumps/xys_020100.dump.pkl',
 'dumps/xys_020200.dump.pkl',
 'dumps/xys_020300.dump.pkl',
 'dumps/xys_020400.dump.pkl',
 'dumps/xys_020500.dump.pkl',
 'dumps/xys_020600.dump.pkl',
 'dumps/xys_020700.dump.pkl',
 'dumps/xys_020800.dump.pkl',
 'dumps/xys_020900.dump.pkl',
 'dumps/xys_021000.dump.pkl',
 'dumps/xys_021100.dump.pkl',
 'dumps/xys_021200.dump.pkl',
 'dumps/xys_021300.dump.pkl',
 'dumps/xys_021400.dump.pkl',
 'dumps/xys_021500.dump.pkl',
 'dumps/xys_021600.dump.pkl',
 'dumps/xys_021700.dump.pkl',
 'dumps/xys_021800.dump.pkl',
 'dumps/xys_021900.dump.pkl',
 'dumps/xys_022000.dump.pkl',
 'dumps/xys_022100.dump.pkl',
 'dumps/xys_022200.dump.pkl',
 'dumps/xys_022300.dump.pkl',
 'dumps/xys_022400.dump.pkl',
 'dumps/xys_022500.dump.pkl',
 'dumps/xys_022600.dump.pkl',
 'dumps/xys_022700.dump.pkl',
 'dumps/xys_022800.dump.pkl',
 'dumps/xys_022900.dump.pkl',
 'dumps/xys_023000.dump.pkl',
 'dumps/xys_023100.dump.pkl',
 'dumps/xys_023200.dump.pkl',
 'dumps/xys_023300.dump.pkl',
 'dumps/xys_023400.dump.pkl',
 'dumps/xys_023500.dump.pkl',
 'dumps/xys_023600.dump.pkl',
 'dumps/xys_023700.dump.pkl',
 'dumps/xys_023800.dump.pkl',
 'dumps/xys_023900.dump.pkl',
 'dumps/xys_024000.dump.pkl',
 'dumps/xys_024100.dump.pkl',
 'dumps/xys_024200.dump.pkl',
 'dumps/xys_024300.dump.pkl',
 'dumps/xys_024400.dump.pkl',
 'dumps/xys_024500.dump.pkl',
 'dumps/xys_024600.dump.pkl',
 'dumps/xys_024700.dump.pkl',
 'dumps/xys_024800.dump.pkl',
 'dumps/xys_024900.dump.pkl',
 'dumps/xys_025000.dump.pkl',
 'dumps/xys_025100.dump.pkl',
 'dumps/xys_025200.dump.pkl',
 'dumps/xys_025300.dump.pkl',
 'dumps/xys_025400.dump.pkl',
 'dumps/xys_025500.dump.pkl',
 'dumps/xys_025600.dump.pkl',
 'dumps/xys_025700.dump.pkl',
 'dumps/xys_025800.dump.pkl',
 'dumps/xys_025900.dump.pkl',
 'dumps/xys_026000.dump.pkl',
 'dumps/xys_026100.dump.pkl',
 'dumps/xys_026200.dump.pkl',
 'dumps/xys_026300.dump.pkl',
 'dumps/xys_026400.dump.pkl',
 'dumps/xys_026500.dump.pkl',
 'dumps/xys_026600.dump.pkl',
 'dumps/xys_026700.dump.pkl',
 'dumps/xys_026800.dump.pkl',
 'dumps/xys_026900.dump.pkl',
 'dumps/xys_027000.dump.pkl',
 'dumps/xys_027100.dump.pkl',
 'dumps/xys_027200.dump.pkl',
 'dumps/xys_027300.dump.pkl',
 'dumps/xys_027400.dump.pkl',
 'dumps/xys_027500.dump.pkl',
 'dumps/xys_027600.dump.pkl',
 'dumps/xys_027700.dump.pkl',
 'dumps/xys_027800.dump.pkl',
 'dumps/xys_027900.dump.pkl',
 'dumps/xys_028000.dump.pkl',
 'dumps/xys_028100.dump.pkl',
 'dumps/xys_028200.dump.pkl',
 'dumps/xys_028300.dump.pkl',
 'dumps/xys_028400.dump.pkl',
 'dumps/xys_028500.dump.pkl',
 'dumps/xys_028600.dump.pkl',
 'dumps/xys_028700.dump.pkl',
 'dumps/xys_028800.dump.pkl',
 'dumps/xys_028900.dump.pkl',
 'dumps/xys_029000.dump.pkl',
 'dumps/xys_029100.dump.pkl',
 'dumps/xys_029200.dump.pkl',
 'dumps/xys_029300.dump.pkl',
 'dumps/xys_029400.dump.pkl',
 'dumps/xys_029500.dump.pkl',
 'dumps/xys_029600.dump.pkl',
 'dumps/xys_029700.dump.pkl',
 'dumps/xys_029800.dump.pkl',
 'dumps/xys_029900.dump.pkl',
 'dumps/xys_030000.dump.pkl',
 'dumps/xys_030100.dump.pkl',
 'dumps/xys_030200.dump.pkl',
 'dumps/xys_030300.dump.pkl',
 'dumps/xys_030400.dump.pkl',
 'dumps/xys_030500.dump.pkl',
 'dumps/xys_030600.dump.pkl',
 'dumps/xys_030700.dump.pkl',
 'dumps/xys_030800.dump.pkl',
 'dumps/xys_030900.dump.pkl',
 'dumps/xys_031000.dump.pkl',
 'dumps/xys_031100.dump.pkl',
 'dumps/xys_031200.dump.pkl',
 'dumps/xys_031300.dump.pkl',
 'dumps/xys_031400.dump.pkl',
 'dumps/xys_031500.dump.pkl',
 'dumps/xys_031600.dump.pkl',
 'dumps/xys_031700.dump.pkl',
 'dumps/xys_031800.dump.pkl',
 'dumps/xys_031900.dump.pkl',
 'dumps/xys_032000.dump.pkl',
 'dumps/xys_032100.dump.pkl',
 'dumps/xys_032200.dump.pkl',
 'dumps/xys_032300.dump.pkl',
 'dumps/xys_032400.dump.pkl',
 'dumps/xys_032500.dump.pkl',
 'dumps/xys_032600.dump.pkl',
 'dumps/xys_032700.dump.pkl',
 'dumps/xys_032800.dump.pkl',
 'dumps/xys_032900.dump.pkl',
 'dumps/xys_033000.dump.pkl',
 'dumps/xys_033100.dump.pkl',
 'dumps/xys_033200.dump.pkl',
 'dumps/xys_033300.dump.pkl',
 'dumps/xys_033400.dump.pkl',
 'dumps/xys_033500.dump.pkl',
 'dumps/xys_033600.dump.pkl',
 'dumps/xys_033700.dump.pkl',
 'dumps/xys_033800.dump.pkl',
 'dumps/xys_033900.dump.pkl',
 'dumps/xys_034000.dump.pkl',
 'dumps/xys_034100.dump.pkl',
 'dumps/xys_034200.dump.pkl',
 'dumps/xys_034300.dump.pkl',
 'dumps/xys_034400.dump.pkl',
 'dumps/xys_034500.dump.pkl',
 'dumps/xys_034600.dump.pkl',
 'dumps/xys_034700.dump.pkl',
 'dumps/xys_034800.dump.pkl',
 'dumps/xys_034900.dump.pkl',
 'dumps/xys_035000.dump.pkl',
 'dumps/xys_035100.dump.pkl',
 'dumps/xys_035200.dump.pkl',
 'dumps/xys_035300.dump.pkl',
 'dumps/xys_035400.dump.pkl',
 'dumps/xys_035500.dump.pkl',
 'dumps/xys_035600.dump.pkl',
 'dumps/xys_035700.dump.pkl',
 'dumps/xys_035800.dump.pkl',
 'dumps/xys_035900.dump.pkl',
 'dumps/xys_036000.dump.pkl',
 'dumps/xys_036100.dump.pkl',
 'dumps/xys_036200.dump.pkl',
 'dumps/xys_036300.dump.pkl',
 'dumps/xys_036400.dump.pkl',
 'dumps/xys_036500.dump.pkl',
 'dumps/xys_036600.dump.pkl',
 'dumps/xys_036700.dump.pkl',
 'dumps/xys_036800.dump.pkl',
 'dumps/xys_036900.dump.pkl',
 'dumps/xys_037000.dump.pkl',
 'dumps/xys_037100.dump.pkl',
 'dumps/xys_037200.dump.pkl',
 'dumps/xys_037300.dump.pkl',
 'dumps/xys_037400.dump.pkl',
 'dumps/xys_037500.dump.pkl',
 'dumps/xys_037600.dump.pkl',
 'dumps/xys_037700.dump.pkl',
 'dumps/xys_037800.dump.pkl',
 'dumps/xys_037900.dump.pkl',
 'dumps/xys_038000.dump.pkl',
 'dumps/xys_038100.dump.pkl',
 'dumps/xys_038200.dump.pkl',
 'dumps/xys_038300.dump.pkl',
 'dumps/xys_038400.dump.pkl',
 'dumps/xys_038500.dump.pkl',
 'dumps/xys_038600.dump.pkl',
 'dumps/xys_038700.dump.pkl',
 'dumps/xys_038800.dump.pkl',
 'dumps/xys_038900.dump.pkl',
 'dumps/xys_039000.dump.pkl',
 'dumps/xys_039100.dump.pkl',
 'dumps/xys_039200.dump.pkl']

In [3]:
data_files = list(np.sort(glob('dumps/xys_*.dump.pkl')))

title = 'Electron Configuration\nDuring Annealing (WIP)'

def update_plot(i, scat):
    with open(data_files[i], 'rb') as f:
        xys = pickle.load(f)
        scat.set_offsets(xys)
        #scat._sizes = xys[:, 0]
        #scat.set_array(xys[:, 0])
    return scat, 

numframes = len(data_files)
numpoints = 100

fig = plt.figure(figsize=(4, 4))
ax = plt.axes(xlim=(-60e-3, 60e-3), ylim=(-60e-3, 60e-3))
fig.subplots_adjust(left=None, bottom=None, right=None, wspace=None, hspace=None)
scatter_plot = plt.scatter([], [], color="#23aaff", edgecolor='none')
plt.title(title)
plt.xlabel('x coordinate (mm)')
plt.ylabel('y coordinate (mm)')

anim = animation.FuncAnimation(fig, update_plot, frames= range(numframes),
                              fargs=[scatter_plot])
writer=animation.FFMpegWriter(bitrate=500, fps=24, codec="mpeg4")
anim.save(
    'figures/Electron Configuration Animated (WIP).mp4', 
    writer=writer,
    # writer='FFMpegWriter',
    # writer='imagemagick',       
    # fps=16, 
    # extra_args=['-vcodec', 'libx264'], 
    dpi=300
)
plt.show()

In [10]:
anim = animation.FuncAnimation(fig, update_plot, frames= range(numframes),
                              fargs=[scatter_plot])
# writer=animation.FFMpegWriter(bitrate=500, fps=30, codec="libx264")
anim.save(
    'figures/Electron Configuration Animated (WIP).gif', 
    writer='imagemagick',       
    fps=16, 
    dpi=300
)
plt.show()

In [14]:
anim = animation.FuncAnimation(fig, update_plot, frames= range(numframes),
                              fargs=[scatter_plot])
# writer=animation.FFMpegWriter(bitrate=500, fps=30, codec="libx264")
anim.save(
    'figures/Electron Configuration Animated (WIP) small.gif', 
    writer='imagemagick',       
    fps=30, 
    dpi=125
)
plt.show()

In [15]:
anim = animation.FuncAnimation(fig, update_plot, frames= range(numframes),
                              fargs=[scatter_plot])
# writer=animation.FFMpegWriter(bitrate=500, fps=30, codec="libx264")
anim.save(
    'figures/Electron Configuration Animated (WIP) twitter.gif', 
    writer='imagemagick',       
    fps=30, 
    dpi=99
)
plt.show()

In [ ]: