Matplotlib logarithmic scatter plot

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Derek Basch

    Matplotlib logarithmic scatter plot

    Can anyone give any suggestions on how to make a logarithmic (base 10)
    x and y axis (loglog) plot in matplotlib? The scatter function doesn't
    seem to have any log functionality built into it.

    Thanks,
    Derek Basch

    P.S. I suck at math so feel free to make me feel stupid if it is really
    easy to do :).

  • Bas

    #2
    Re: Matplotlib logarithmic scatter plot

    Try this, don't know if this works for al versions:

    from pylab import *
    x=10**linspace( 0,5,100)
    y=1/(1+x/1000)
    loglog(x,y)
    show()

    If you only need a logarithm along one axis you can use semilogx() or
    semilogy(). For more detailed questions go to the matplotlib mailing
    list.

    Cheers,
    Bas

    Comment

    • Derek Basch

      #3
      Re: Matplotlib logarithmic scatter plot

      Thanks for the reply. I need a scatter plot though. Can that be done?

      Comment

      • John Hunter

        #4
        Re: Matplotlib logarithmic scatter plot

        >>>>> "Derek" == Derek Basch <dbasch@yahoo.c om> writes:

        Derek> Thanks for the reply. I need a scatter plot though. Can
        Derek> that be done?

        You can set the scale of xaxis and yaxis to either log or linear for
        scatter plots

        In [33]: ax = subplot(111)

        In [34]: ax.scatter( 1e6*rand(1000), rand(1000))
        Out[34]: <matplotlib.col lections.Regula rPolyCollection instance at
        0x9c32fac>

        In [35]: ax.set_xscale(' log')

        In [36]: ax.set_xlim(1e-6,1e6)
        Out[36]: (9.999999999999 9995e-07, 1000000.0)

        In [37]: draw()

        Comment

        • Derek Basch

          #5
          Re: Matplotlib logarithmic scatter plot

          Great! That worked fine after I played with it for a bit. One last
          question though. How do I label the ticks with the product of the
          exponentiation? For instance:

          100

          instead of

          10**2

          Thanks for all the help,
          Derek Basch

          Comment

          • John Hunter

            #6
            Re: Matplotlib logarithmic scatter plot

            >>>>> "Derek" == Derek Basch <dbasch@yahoo.c om> writes:

            Derek> Great! That worked fine after I played with it for a
            Derek> bit. One last question though. How do I label the ticks
            Derek> with the product of the exponentiation? For instance:

            Derek> 100

            Derek> instead of

            Derek> 10**2

            You can supply your own custom tick formatters (and locators). See



            and examples





            JDH

            Comment

            • Derek Basch

              #7
              Re: Matplotlib logarithmic scatter plot

              Thanks again. Here is the finished product. Maybe it will help someone
              in the future:

              from pylab import *

              def log_10_product( x, pos):
              """The two args are the value and tick position.
              Label ticks with the product of the exponentiation" ""
              return '%1i' % (x)

              ax = subplot(111)
              # Axis scale must be set prior to declaring the Formatter
              # If it is not the Formatter will use the default log labels for ticks.
              ax.set_xscale(' log')
              ax.set_yscale(' log')

              formatter = FuncFormatter(l og_10_product)
              ax.xaxis.set_ma jor_formatter(f ormatter)
              ax.yaxis.set_ma jor_formatter(f ormatter)

              ax.scatter( [3, 5, 70, 700, 900], [4, 8, 120, 160, 200], s=8, c='b',
              marker='s', faceted=False)
              ax.scatter( [1000, 2000, 3000, 4000, 5000], [2000, 4000, 6000, 8000,
              1000], s=8, c='r', marker='s', faceted=False)

              ax.set_xlim(1e-1, 1e5)
              ax.set_ylim(1e-1, 1e5)
              grid(True)
              xlabel(r"Result ", fontsize = 12)
              ylabel(r"Predic tion", fontsize = 12)

              show()

              Comment

              • John Hunter

                #8
                Re: Matplotlib logarithmic scatter plot

                >>>>> "Derek" == Derek Basch <dbasch@yahoo.c om> writes:

                Derek> formatter = FuncFormatter(l og_10_product)
                Derek> ax.xaxis.set_ma jor_formatter(f ormatter)
                Derek> ax.yaxis.set_ma jor_formatter(f ormatter)

                I would caution you against using identical objects for the x and y
                axis *Locators*. For the formatters, it will do no harm, but for the
                locators you can get screwed up because the locator object reads the
                axis data and view limits when making it's choices.

                Ie, do not do this:

                ax.xaxis.set_ma jor_locator(loc ator)
                ax.yaxis.set_ma jor_locator(loc ator)

                but rather do this

                ax.xaxis.set_ma jor_locator(MyL ocator())
                ax.yaxis.set_ma jor_locator(Myl ocator())

                Thanks for the example,
                JDH

                Comment

                • Derek Basch

                  #9
                  Re: Matplotlib logarithmic scatter plot

                  Good tip John. Hopefully it will help someone out. Thanks again.
                  Derek Basch

                  Comment

                  Working...