from IPython.html.widgets import interact, interactive, fixed from IPython.html import widgets from IPython.display import clear_output, display, HTML from ipywidgets import StaticInteract, RangeWidget, RadioWidget %run ph2co_grid_computation.py import sys sys.path += ['/Users/adam/virtual-python/lib/python2.7/site-packages/mpld3-0.0.1-py2.7.egg'] sys.path += ['/Users/adam/virtual-python/lib/python2.7/site-packages/JSAnimation-0.1-py2.7.egg-info'] class LinkedView(plugins.PluginBase): """A simple plugin showing how multiple axes can be linked""" FIG_JS = jinja2.Template(""" var linedata{{ id }} = {{ linedata }}; ax{{ axid }}.axes.selectAll(".paths{{ collid }}") .on("mouseover", function(d, i){ line{{ elid }}.data = linedata{{ id }}[i]; line{{ elid }}.lineobj.transition() .attr("d", line{{ elid }}.line(line{{ elid }}.data)) .style("stroke", this.style.fill);}) """) def __init__(self, points, line, linedata): self.points = points self.line = line self.linedata = linedata self.id = self.generate_unique_id() def _fig_js_args(self): points = self._get_d3obj(self.points) line = self._get_d3obj(self.line) return dict(id=self.id, axid=points.axid, collid=points.collid, elid=line.elid, lineaxid=line.axid, lineid=line.lineid, linedata=json.dumps(self.linedata)) class Slider(plugins.PluginBase): FIG_JS = jinja2.Template(""" fig.root.append("div") .append("slider") .on("slide", function(evt,value) { d3.select('#slider3text').text(value); } ); """) # line = ax{{ axid }}.axes.selectAll(".line{{ elid }}"); # line.data = linedata{{ id }}[value]; fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2) d3fig = fig_to_d3(fig) #lines1 = ax1.plot(temperatures, taugrid_71M) points1 = ax1.scatter(temperatures, taugrid_71M[:,10]) lines2 = ax2.plot(temperatures, texgrid_71M, 'w') ax2.set_ylim(0,50) lines3 = ax3.plot(densities, taugrid_71M.T,'w') lines4 = ax4.plot(densities, taugrid_71M.T,'w') linedata = np.array([(temperatures,tx) for tx in texgrid_71M]).swapaxes(1,2) plugins.connect(fig, LinkedView(points1, lines2[0], linedata.tolist())) linedata = np.array([(densities,tx) for tx in taugrid_71M]).swapaxes(1,2) plugins.connect(fig, LinkedView(points1, lines3[0], linedata.tolist())) linedata = np.array([(densities,tx) for tx in texgrid_71M]).swapaxes(1,2) plugins.connect(fig, LinkedView(points1, lines4[0], linedata.tolist())) plugins.connect(fig, plugins.ResetButton()) #plugins.connect(fig, Slider()) display_d3(fig) # transpose line data and add plugin #linedata = data.transpose(0, 2, 1).tolist() #show_d3() pb = plugins.PluginBase() plugins.connect(fig, LinkedView(None,None,None)) pb.figure = fig pb._get_d3obj(lines1[0]) densities.size styleargs = {'linewidth': 2, 'alpha': 0.5, 'color':'#5A228B'} def setup(tem=5,dens=5,show=False): fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2, sharex='col', sharey='row', squeeze=True, figsize=(10,7)) plt.subplots_adjust(hspace=0,wspace=0) lines1, = ax1.plot(temperatures, taugrid_71M[dens,:], **styleargs) ax1.set_ylim(-0.2,0.2) ax1.plot(temperatures[tem],taugrid_71M[dens,tem], 'o',alpha=0.5, markeredgecolor='none') lines2, = ax3.plot(temperatures, texgrid_71M[dens,:], **styleargs) ax3.set_ylim(0,50) ax3.plot(temperatures[tem],texgrid_71M[dens,tem], 'o',alpha=0.5, markeredgecolor='none') lines3, = ax2.semilogx(densities, taugrid_71M[:,tem], **styleargs) ax2.set_ylim(-0.2,0.2) ax2.plot(densities[dens],taugrid_71M[dens,tem], 'o',alpha=0.5, markeredgecolor='none') lines4, = ax4.semilogx(densities, texgrid_71M[:,tem], **styleargs) ax4.plot(densities[dens],texgrid_71M[dens,tem], 'o',alpha=0.5, markeredgecolor='none') ax4.set_ylim(0,50) plt.suptitle("$T=%i$ K, $n=10^{%0.1f}$ cm$^{-3}$" % (temperatures[tem],np.log10(densities[dens]))) ax4.set_xlabel('$n(H_2)$') ax3.set_xlabel("T") ax1.set_ylabel(r"$\tau$") ax3.set_ylabel("$T_{ex}$") if show: plt.show() return fig,lines1,lines2,lines3,lines4 #return ax1,ax2,ax3,ax4 #ax1,ax2,ax3,ax4 = setup() #fig,lines1,lines2,lines3,lines4 = setup() def run_plot_temden(): fig,lines1,lines2,lines3,lines4 = setup() #@interact(tem=(0,10),dens=(0,10)) def plot_temden(tem,dens): lines1.set_data(temperatures, taugrid_71M[dens,:]) lines2.set_data(temperatures, texgrid_71M[dens,:]) lines3.set_data(densities, taugrid_71M[:,tem]) lines4.set_data(densities, texgrid_71M[:,tem]) plt.show() interact(plot_temden, tem=(0,temperatures.size),dens=(0,densities.size)) def dumb_interact(): interact(setup, tem=(0,temperatures.size),dens=(0,densities.size), show=True) dumb_interact() from JSAnimation import IPython_display from matplotlib import animation fig,lines1,lines2,lines3,lines4 = setup() def plot_temden(dens,tem=5): lines1.set_data(temperatures, taugrid_71M[dens,:]) lines2.set_data(temperatures, texgrid_71M[dens,:]) lines3.set_data(densities, taugrid_71M[:,tem]) lines4.set_data(densities, texgrid_71M[:,tem]) plt.suptitle("$T=%i$ K, $n=10^{%0.1f}$ cm$^{-3}$" % (temperatures[tem],np.log10(densities[dens]))) return lines1,lines2,lines3,lines4 animation.FuncAnimation(fig, plot_temden, frames=10, interval=1, blit=True)