|
From: Tommy C. <tom...@gm...> - 2015-02-14 17:28:56
|
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
>
>
|