Hello all, I’m having trouble getting yt to plot 2 gas-phase diagrams side-by-side in a grid. I can do this fine for a projection plot, phase plots seems to behave differently. Here’s the code — any idea how to get these two plots side by side sharing the same scale/color-bar? # fractional=True keyword -- divide the profile data by the sum. fns = [ "/Users/earnric/RAMSES-Data/coolingFixedTau/output_00010/info_00010.txt", "/Users/earnric/RAMSES-Data/noCool/output_00010/info_00010.txt"] fig = plt.figure() grid = AxesGrid(fig, (0.075,0.075,0.85,0.85), nrows_ncols = (1, 2), axes_pad = 0.05, label_mode = "L", share_all = True, cbar_location="right", cbar_mode="single", cbar_size="3%", cbar_pad="0%") fig.suptitle("Gas Phase") for i, fn in enumerate(fns): ds = yt.load(fn) ad = ds.all_data() p = yt.PhasePlot(ad, "density", "temperature", "cell_mass", x_bins=256, y_bins=256, weight_field=None, fractional=True ) plot = p.plots['cell_mass'] if i % 2 == 0: ptype = "Gas phase ${H_2}$ cooling " else: ptype = "Gas phase Standard cooling " zStr = ptype + "z = %.1f" % ds.current_redshift plot.figure = fig plot.axes = grid[i].axes plot.cax = grid.cbar_axes[i] #plot.annotate_title(zStr) # YOU HAVE TO DO THIS AFTER THE AXES calls p['cell_mass'].axes.set_ylim (1e-1, 1e6) p['cell_mass'].axes.set_xlim (1e-29, 1e-24) p['cell_mass'].axes.set_title(zStr, fontsize=20) p.show() Cheers, Rick Sarmento
Hey Rick,
On Tue, Nov 4, 2014 at 9:21 PM, Rick Sarmento
Hello all,
I’m having trouble getting yt to plot 2 gas-phase diagrams side-by-side in a grid. I can do this fine for a projection plot, phase plots seems to behave differently. Here’s the code — any idea how to get these two plots side by side sharing the same scale/color-bar?
# fractional=True keyword -- divide the profile data by the sum. fns = [ "/Users/earnric/RAMSES-Data/coolingFixedTau/output_00010/info_00010.txt", "/Users/earnric/RAMSES-Data/noCool/output_00010/info_00010.txt"]
fig = plt.figure() grid = AxesGrid(fig, (0.075,0.075,0.85,0.85), nrows_ncols = (1, 2), axes_pad = 0.05, label_mode = "L", share_all = True, cbar_location="right", cbar_mode="single", cbar_size="3%", cbar_pad="0%") fig.suptitle("Gas Phase")
for i, fn in enumerate(fns): ds = yt.load(fn) ad = ds.all_data() p = yt.PhasePlot(ad, "density", "temperature", "cell_mass", x_bins=256, y_bins=256, weight_field=None, fractional=True ) plot = p.plots['cell_mass'] if i % 2 == 0: ptype = "Gas phase ${H_2}$ cooling " else: ptype = "Gas phase Standard cooling " zStr = ptype + "z = %.1f" % ds.current_redshift plot.figure = fig plot.axes = grid[i].axes plot.cax = grid.cbar_axes[i] #plot.annotate_title(zStr) # YOU HAVE TO DO THIS AFTER THE AXES calls
p['cell_mass'].axes.set_ylim (1e-1, 1e6) p['cell_mass'].axes.set_xlim (1e-29, 1e-24) p['cell_mass'].axes.set_title(zStr, fontsize=20) p.show()
FWIW, this is the first I've ever heard someone trying to do this. I can confirm that it doesn't work. I tried experimenting a bit and unfortunately I think you're running into a limitation of matplotlib: AxesGrid doesn't support logarithmic x and y axes. I can get something sort of sensible if I specify linear x and y axes and manually adjust the aspect ratio, but I don't think this is a particularly sustainable solution for supporting these sorts of plots: http://nbviewer.ipython.org/gist/ngoldbaum/ab71b48bd42e8c2a5b42 Unfortunately when I try to make the same plot using logarithmic axes, I get junk: http://nbviewer.ipython.org/gist/ngoldbaum/821e44612f53eae830d8 I think the most straightforward way to do this would be to do it 100% manually (outside of PhasePlot) using a Profile2D object and matplotlib. If you figure out something that works for you I think it would be a good addition for the cookbook. It might be possible to use PhasePlot with a hand-constructured set of axes, but I've never tried to set that up so I'm not sure if you'll need to modify yt to get it to work. Sorry I don't have better news for you - good luck with getting this plot working. -Nathan
*Cheers,*
*Rick Sarmento*
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
Thanks a lot Nathan … I think I can make due by generating separate plots and then pasting them together manually. Good to know that it wasn’t something dumb I was doing :) Cheers! Rick Sarmento SESE Astronomy/Astrophysics Grad Student rsarment@asu.edu
On Nov 4, 2014, at 11:34 PM, Nathan Goldbaum
wrote: Hey Rick,
On Tue, Nov 4, 2014 at 9:21 PM, Rick Sarmento
mailto:rsarment@asu.edu> wrote: Hello all,
I’m having trouble getting yt to plot 2 gas-phase diagrams side-by-side in a grid. I can do this fine for a projection plot, phase plots seems to behave differently. Here’s the code — any idea how to get these two plots side by side sharing the same scale/color-bar?
# fractional=True keyword -- divide the profile data by the sum. fns = [ "/Users/earnric/RAMSES-Data/coolingFixedTau/output_00010/info_00010.txt", "/Users/earnric/RAMSES-Data/noCool/output_00010/info_00010.txt"]
fig = plt.figure() grid = AxesGrid(fig, (0.075,0.075,0.85,0.85), nrows_ncols = (1, 2), axes_pad = 0.05, label_mode = "L", share_all = True, cbar_location="right", cbar_mode="single", cbar_size="3%", cbar_pad="0%") fig.suptitle("Gas Phase")
for i, fn in enumerate(fns): ds = yt.load(fn) ad = ds.all_data() p = yt.PhasePlot(ad, "density", "temperature", "cell_mass", x_bins=256, y_bins=256, weight_field=None, fractional=True ) plot = p.plots['cell_mass'] if i % 2 == 0: ptype = "Gas phase ${H_2}$ cooling " else: ptype = "Gas phase Standard cooling " zStr = ptype + "z = %.1f" % ds.current_redshift plot.figure = fig plot.axes = grid[i].axes plot.cax = grid.cbar_axes[i] #plot.annotate_title(zStr) # YOU HAVE TO DO THIS AFTER THE AXES calls
p['cell_mass'].axes.set_ylim (1e-1, 1e6) p['cell_mass'].axes.set_xlim (1e-29, 1e-24) p['cell_mass'].axes.set_title(zStr, fontsize=20) p.show()
FWIW, this is the first I've ever heard someone trying to do this. I can confirm that it doesn't work.
I tried experimenting a bit and unfortunately I think you're running into a limitation of matplotlib: AxesGrid doesn't support logarithmic x and y axes.
I can get something sort of sensible if I specify linear x and y axes and manually adjust the aspect ratio, but I don't think this is a particularly sustainable solution for supporting these sorts of plots:
http://nbviewer.ipython.org/gist/ngoldbaum/ab71b48bd42e8c2a5b42 http://nbviewer.ipython.org/gist/ngoldbaum/ab71b48bd42e8c2a5b42
Unfortunately when I try to make the same plot using logarithmic axes, I get junk:
http://nbviewer.ipython.org/gist/ngoldbaum/821e44612f53eae830d8 http://nbviewer.ipython.org/gist/ngoldbaum/821e44612f53eae830d8
I think the most straightforward way to do this would be to do it 100% manually (outside of PhasePlot) using a Profile2D object and matplotlib. If you figure out something that works for you I think it would be a good addition for the cookbook.
It might be possible to use PhasePlot with a hand-constructured set of axes, but I've never tried to set that up so I'm not sure if you'll need to modify yt to get it to work.
Sorry I don't have better news for you - good luck with getting this plot working.
-Nathan
Cheers,
Rick Sarmento
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org mailto:yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org mailto:yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
participants (2)
-
Nathan Goldbaum
-
Rick Sarmento