# changing labeling of axes

8 messages
Open this post in threaded view
|

## changing labeling of axes

 Hi,I'm wondering if anyone knows of a good way to relabel axes for a particular case I'm dealing with. I'm making a 2D histogram, using hist2d of course.  The thing is that for my case, where I'm plotting the density vs. pressure for results from a hydro run, it makes more sense to use the log of the quantities as the inputs for hist2d.  So then I need to give the log of the density and pressure to hist2d. This works fine for making the histogram, but then the axes are labelled with log10(n), log10(P).  I'd prefer to have the axes labelled as for a logarithmic plot, so instead of say 4.0, 10^4.  Is there a simple way of doing that. I'm pretty sure I can just specify by hand the ticks and tick labels, though that's kind of a pain. Any help would be appreciated.Regards,Jon-- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users
Open this post in threaded view
|

## Re: changing labeling of axes

 You can do `ax.set_xscale('log')` to set the x-axis to log scale and similarly for the y-axis. It'll automatically make the tick labels make sense. Also, you won't need to pass in the log10 of n or P, matplotlib will handle all of that for you.Cheers!Ben RootOn Wed, Nov 8, 2017 at 10:10 AM, Slavin, Jonathan wrote:Hi,I'm wondering if anyone knows of a good way to relabel axes for a particular case I'm dealing with. I'm making a 2D histogram, using hist2d of course.  The thing is that for my case, where I'm plotting the density vs. pressure for results from a hydro run, it makes more sense to use the log of the quantities as the inputs for hist2d.  So then I need to give the log of the density and pressure to hist2d. This works fine for making the histogram, but then the axes are labelled with log10(n), log10(P).  I'd prefer to have the axes labelled as for a logarithmic plot, so instead of say 4.0, 10^4.  Is there a simple way of doing that. I'm pretty sure I can just specify by hand the ticks and tick labels, though that's kind of a pain. Any help would be appreciated.Regards,Jon-- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users
Open this post in threaded view
|

## Re: changing labeling of axes

 In reply to this post by Slavin, Jonathan Hi Ben,The issue with that is that I want to retain the logarithmic binning. If I change the xscale/yscale to log with the binning as set up now, then it will try to scale the log values logarithmically.  So I still want the axes to be scaled in the same way, I just want the labeling of the axes to be different.  Is that clear?JonOn Wed, Nov 8, 2017 at 10:25 AM, Benjamin Root wrote:You can do `ax.set_xscale('log')` to set the x-axis to log scale and similarly for the y-axis. It'll automatically make the tick labels make sense. Also, you won't need to pass in the log10 of n or P, matplotlib will handle all of that for you.Cheers!Ben RootOn Wed, Nov 8, 2017 at 10:10 AM, Slavin, Jonathan wrote:Hi,I'm wondering if anyone knows of a good way to relabel axes for a particular case I'm dealing with. I'm making a 2D histogram, using hist2d of course.  The thing is that for my case, where I'm plotting the density vs. pressure for results from a hydro run, it makes more sense to use the log of the quantities as the inputs for hist2d.  So then I need to give the log of the density and pressure to hist2d. This works fine for making the histogram, but then the axes are labelled with log10(n), log10(P).  I'd prefer to have the axes labelled as for a logarithmic plot, so instead of say 4.0, 10^4.  Is there a simple way of doing that. I'm pretty sure I can just specify by hand the ticks and tick labels, though that's kind of a pain. Any help would be appreciated.Regards,Jon-- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users -- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users
Open this post in threaded view
|

## Re: changing labeling of axes

 Ah, then you need to simply change the tick formatter. Here are some examples:https://matplotlib.org/devdocs/gallery/ticks_and_spines/tick-formatters.htmlCheers!Ben RootOn Wed, Nov 8, 2017 at 11:09 AM, Slavin, Jonathan wrote:Hi Ben,The issue with that is that I want to retain the logarithmic binning. If I change the xscale/yscale to log with the binning as set up now, then it will try to scale the log values logarithmically.  So I still want the axes to be scaled in the same way, I just want the labeling of the axes to be different.  Is that clear?JonOn Wed, Nov 8, 2017 at 10:25 AM, Benjamin Root wrote:You can do `ax.set_xscale('log')` to set the x-axis to log scale and similarly for the y-axis. It'll automatically make the tick labels make sense. Also, you won't need to pass in the log10 of n or P, matplotlib will handle all of that for you.Cheers!Ben RootOn Wed, Nov 8, 2017 at 10:10 AM, Slavin, Jonathan wrote:Hi,I'm wondering if anyone knows of a good way to relabel axes for a particular case I'm dealing with. I'm making a 2D histogram, using hist2d of course.  The thing is that for my case, where I'm plotting the density vs. pressure for results from a hydro run, it makes more sense to use the log of the quantities as the inputs for hist2d.  So then I need to give the log of the density and pressure to hist2d. This works fine for making the histogram, but then the axes are labelled with log10(n), log10(P).  I'd prefer to have the axes labelled as for a logarithmic plot, so instead of say 4.0, 10^4.  Is there a simple way of doing that. I'm pretty sure I can just specify by hand the ticks and tick labels, though that's kind of a pain. Any help would be appreciated.Regards,Jon-- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users -- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users
Open this post in threaded view
|

## Re: changing labeling of axes

 In reply to this post by Slavin, Jonathan You can do this with the formatter on the axis, see https://matplotlib.org/gallery/ticks_and_spines/tick-formatters.html#sphx-glr-gallery-ticks-and-spines-tick-formatters-py and https://matplotlib.org/api/ticker_api.htmlYou can also pass log-spaced bins to `hist2D` and then set the axis scales to log (but trying to construct an example did not got as I expected...)TomOn Wed, Nov 8, 2017 at 10:10 AM Slavin, Jonathan <[hidden email]> wrote:Hi,I'm wondering if anyone knows of a good way to relabel axes for a particular case I'm dealing with. I'm making a 2D histogram, using hist2d of course.  The thing is that for my case, where I'm plotting the density vs. pressure for results from a hydro run, it makes more sense to use the log of the quantities as the inputs for hist2d.  So then I need to give the log of the density and pressure to hist2d. This works fine for making the histogram, but then the axes are labelled with log10(n), log10(P).  I'd prefer to have the axes labelled as for a logarithmic plot, so instead of say 4.0, 10^4.  Is there a simple way of doing that. I'm pretty sure I can just specify by hand the ticks and tick labels, though that's kind of a pain. Any help would be appreciated.Regards,Jon-- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users
Open this post in threaded view
|

## Re: changing labeling of axes

 I was able to get the major ticks labeled in the way I want by doing:ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x,pos: r'\$10^{%i}\$'% x))I don't get any minor ticks that way.  I could live with that, though I'd prefer to get logarithmically spaced minor ticks.  I tried ax.xaxis.set_minor_locator(ticker.LogLocator())but that seemed to have no effect.The idea of providing logarithmically  bin edges seems like a good one, but as Tom says does not do what is expected.  I tried using numpy's histogram2d providing logarithmically spaced bins and it worked as expected (though for some reason the array returned was transposed), so I think this is a bug in hist2d.JonOn Wed, Nov 8, 2017 at 12:01 PM, Thomas Caswell wrote:You can do this with the formatter on the axis, see https://matplotlib.org/gallery/ticks_and_spines/tick-formatters.html#sphx-glr-gallery-ticks-and-spines-tick-formatters-py and https://matplotlib.org/api/ticker_api.htmlYou can also pass log-spaced bins to `hist2D` and then set the axis scales to log (but trying to construct an example did not got as I expected...)TomOn Wed, Nov 8, 2017 at 10:10 AM Slavin, Jonathan <[hidden email]> wrote:Hi,I'm wondering if anyone knows of a good way to relabel axes for a particular case I'm dealing with. I'm making a 2D histogram, using hist2d of course.  The thing is that for my case, where I'm plotting the density vs. pressure for results from a hydro run, it makes more sense to use the log of the quantities as the inputs for hist2d.  So then I need to give the log of the density and pressure to hist2d. This works fine for making the histogram, but then the axes are labelled with log10(n), log10(P).  I'd prefer to have the axes labelled as for a logarithmic plot, so instead of say 4.0, 10^4.  Is there a simple way of doing that. I'm pretty sure I can just specify by hand the ticks and tick labels, though that's kind of a pain. Any help would be appreciated.Regards,Jon-- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users -- ________________________________________________________Jonathan D. Slavin                 Harvard-Smithsonian CfA[hidden email]       60 Garden Street, MS 83phone: (617) 496-7981       Cambridge, MA 02138-1516cell: (781) 363-0035             USA________________________________________________________ _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users