|
From: Ryan N. <rne...@gm...> - 2015-02-14 19:20:12
|
You're welcome, Tommy. I used gnuplot many years ago, but I've been much
happier now that I know MPL.
A gnuplot->MPL Rosetta Stone might be a useful blog post for someone. I
haven't used gnuplot in so long that I don't think I could do this myself.
R
On Sat, Feb 14, 2015 at 12:28 PM, Tommy Carstensen <
tom...@gm...> wrote:
> Whoa, thanks for a great answer Ryan. I can see, why the level of
> control MPL gives you is a great sales pitch. It's one of the reasons,
> why I switched from gnuplot after using it for many years and making
> many cool plots. The MPL learning curve has just been a bit steep,
> when you are used to plot whatever you want.
>
> On Sat, Feb 14, 2015 at 5:06 PM, Ryan Nelson <rne...@gm...>
> wrote:
> > Tommy,
> >
> > I'll try to answer your points in order:
> >
> > 1) Oops. That should have been "xticks".
> > import matplotlib.pyplot as plt
> > plt.plot([1,3,2])
> > ticks, labels = plt.xticks()
> > plt.xticks(ticks, horizontalalignment='left')
> > plt.show()
> >
> >
> > 2) Sorry for the ambiguity. "OO" is short for object-oriented. There are
> two
> > different approaches that people tend to use to make plots (although they
> > can be mixed): 1) the "pyplot" way, which uses the pyplot wrapper
> functions
> > and 2) the object-oriented way, which modifies the objects directly.
> This is
> > what you did in your example where you snag the axes objects and operate
> on
> > them directly. The "OO" way is ultimately more powerful, because the
> pyplot
> > wrapper functions override some of your control. For example, because you
> > want twin axes, you might not be able to use the pyplot.xticks function
> > (Others, correct me if I'm wrong.), and you lose some fine control. See
> next
> > example.
> >
> > 3) I know it *seems* like the for loop is an "ugly hack". However, you
> have
> > to realize that this ultimately gives you a TON of control. Let's say,
> for
> > example, that you wanted only one of the labels to be large and red to
> > highlight a certain value. Using a modified version of your example, we
> get
> > this:
> > ______________
> > import matplotlib.pyplot as plt
> > fig = plt.figure()
> > ax1 = fig.add_subplot(111)
> > ax2 = ax1.twinx()
> > labels = ax2.yaxis.get_ticklabels()
> > [l.set_horizontalalignment('right') for l in labels]
> > labels[2].set_color('red')
> > labels[2].set_fontsize(20)
> > ax2.tick_params(pad=20)
> > ax1.plot(list(range(11)))
> > ax1.set_xlim(0,10)
> > ax2.set_ylim(0,10)
> > plt.show()
> > ____________
> > I personally think that this level of control is very, very cool and one
> of
> > the big selling points for MPL in general.
> >
> > Okay. If you want to set the alignment all the time, there might be a
> way to
> > control this with matplotlibrc or style sheets:
> > http://matplotlib.org/users/customizing.html
> > http://matplotlib.org/users/style_sheets.html
> > However, I'm not the biggest fan of changing matplotlibrc. Mostly
> because if
> > others try to reproduce your plots, they also need your rc file as well.
> I
> > haven't used style sheets yet, but that might be a fix to this issue
> (for me
> > at least).
> >
> > Hope that helps.
> >
> > Ryan
> >
> > On Sat, Feb 14, 2015 at 10:30 AM, Tommy Carstensen
> > <tom...@gm...> wrote:
> >>
> >> Hi Ryan,
> >>
> >> Thanks for your answer. Sorry for not replying sooner. I fell asleep
> >> shortly after sending my question.
> >>
> >> What is "the OO way"?
> >>
> >> Your 1st solution gives:
> >> AttributeError: 'module' object has no attribute 'ticks'
> >>
> >> I modified your 2nd solution to accommodate my wishes and needs:
> >> import matplotlib.pyplot as plt
> >> fig = plt.figure()
> >> ax1 = fig.add_subplot(111)
> >> ax2 = ax1.twinx()
> >> for label in ax2.yaxis.get_ticklabels():
> >> label.set_horizontalalignment('right')
> >> ax2.tick_params(pad=20)
> >> ax1.plot(list(range(11)))
> >> ax1.set_xlim(0,10)
> >> ax2.set_ylim(0,10)
> >> plt.show()
> >>
> >> It seems like an awful hack with that for loop, but it works. I'm not
> >> sure, why the secondary right hand side axis don't have right aligned
> >> labels by default. That would make a lot of sense. It would be great,
> >> if I could set the horizontal alignment without having to use a for
> >> loop. It's just plain ugly. In gnuplot it's as simple as this:
> >> set ytics right
> >>
> >> Thanks for your help and providing me with a solution.
> >>
> >> Tommy
> >>
> >> On Sat, Feb 14, 2015 at 1:31 AM, Ryan Nelson <rne...@gm...>
> >> wrote:
> >> > Tommy,
> >> >
> >> > You are probably looking for pyplot.xticks. For example, you might
> want
> >> > something along these lines:
> >> >
> >> > import matplotlib.pyplot as plt
> >> > plt.plot([1,3,2])
> >> > # We'll do this to get the autogenerated positions
> >> > ticks, labels = plt.xticks()
> >> > plt.ticks(ticks, horizontalalignment='left')
> >> > plt.show()
> >> >
> >> > Or if your using the OO way:
> >> >
> >> > import matplotlib.pyplot as plt
> >> > fig = plt.figure()
> >> > ax = fig.add_subplot(111)
> >> > ax.plot([1,3,2])
> >> > labels = ax.get_xticklabels()
> >> > [l.set_horizontalalignment('left') for l in labels]
> >> > plt.show()
> >> >
> >> > I think that's the best way. Hope it helps.
> >> >
> >> > Ryan
> >> >
> >> >
> >> >
> >> > On Fri, Feb 13, 2015 at 7:29 PM, Tommy Carstensen
> >> > <tom...@gm...> wrote:
> >> >>
> >> >> How can I set the horizontal alignment of a secondary y-axis to
> >> >> 'right'? Currently the numbers are glued to the axis. I want the axis
> >> >> values to be right aligned integers. Thanks.
> >> >>
> >> >>
> >> >>
> >> >>
> ------------------------------------------------------------------------------
> >> >> Dive into the World of Parallel Programming. The Go Parallel Website,
> >> >> sponsored by Intel and developed in partnership with Slashdot Media,
> is
> >> >> your
> >> >> hub for all things parallel software development, from weekly thought
> >> >> leadership blogs to news, videos, case studies, tutorials and more.
> >> >> Take a
> >> >> look and join the conversation now.
> http://goparallel.sourceforge.net/
> >> >> _______________________________________________
> >> >> Matplotlib-users mailing list
> >> >> Mat...@li...
> >> >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >> >
> >> >
> >>
> >>
> >>
> ------------------------------------------------------------------------------
> >> Dive into the World of Parallel Programming. The Go Parallel Website,
> >> sponsored by Intel and developed in partnership with Slashdot Media, is
> >> your
> >> hub for all things parallel software development, from weekly thought
> >> leadership blogs to news, videos, case studies, tutorials and more.
> Take a
> >> look and join the conversation now. http://goparallel.sourceforge.net/
> >> _______________________________________________
> >> Matplotlib-users mailing list
> >> Mat...@li...
> >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >
> >
>
>
> ------------------------------------------------------------------------------
> Dive into the World of Parallel Programming. The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is
> your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net/
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
|