Hi everyone,
I am plotting a figure where I need two independent x axes and two independent y axes. I've tried to use both twinx and twiny at the same time, and this works to some extent, but it looks like it is plotting the labels for the bottom x axis and the right-hand y axis twice, which makes me think that I must be doing something wrong (the numbers appear more 'bold'). The code is below. Is there a better way to do this?
In reality, I don't need a different scale for the opposite axes, but I want to specify different Locator functions, but I assume that creating a new axes instance as done below is the only way to do this?
Thanks for any advice,
Thomas
···
###
fig = figure()
ax = fig.add_subplot(111)
ax2 = ax.twinx().twiny()
for tick in ax.yaxis.get_major_ticks():
tick.label1On = True
tick.label2On = False
tick.tick1On = True
tick.tick2On = False
for tick in ax.xaxis.get_major_ticks():
tick.label1On = True
tick.label2On = False
tick.tick1On = True
tick.tick2On = False
for tick in ax2.yaxis.get_major_ticks():
tick.label1On = False
tick.label2On = True
tick.tick1On = False
tick.tick2On = True
for tick in ax2.xaxis.get_major_ticks():
tick.label1On = False
tick.label2On = True
tick.tick1On = False
tick.tick2On = True
ax.scatter([0.4],[0.6])
ax2.scatter([10.],[10.])
draw()
###
Since you call twinx then twiny, you're creating two additional axes, not one.
And I guess this is why labels are drawn twice. You may do
def twin(ax):
ax2 = ax.figure.add_axes(ax.get_position(True),
frameon=False)
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position('right')
ax.yaxis.tick_left()
ax2.xaxis.tick_top()
ax2.xaxis.set_label_position('top')
ax.xaxis.tick_bottom()
return ax2
ax = gca()
ax2 = twin(ax)
ax.scatter([0.4],[0.6])
ax2.scatter([10.],[10.])
draw()
Note that you need to manually adjust the view limits of each axes. If
you use sharex or sharey parameters for the axes, you can share their
view limits (this is how axes is created when twinx and twiny is
called). But then you cannot have different tick locators.
In case you need an axes with a same viewlimit as the original one but
just want to place ticks at different position, you may check my
related post.
http://sourceforge.net/mailarchive/forum.php?thread_name=4985DED6.90108%40head.cfa.harvard.edu&forum_name=matplotlib-users
-JJ
···
On Sun, Feb 8, 2009 at 5:07 PM, Thomas Robitaille <thomas.robitaille@...287...> wrote:
Hi everyone,
I am plotting a figure where I need two independent x axes and two
independent y axes. I've tried to use both twinx and twiny at the
same time, and this works to some extent, but it looks like it is
plotting the labels for the bottom x axis and the right-hand y axis
twice, which makes me think that I must be doing something wrong (the
numbers appear more 'bold'). The code is below. Is there a better way
to do this?
In reality, I don't need a different scale for the opposite axes, but
I want to specify different Locator functions, but I assume that
creating a new axes instance as done below is the only way to do this?
Thanks for any advice,
Thomas
###
fig = figure()
ax = fig.add_subplot(111)
ax2 = ax.twinx().twiny()
for tick in ax.yaxis.get_major_ticks():
tick.label1On = True
tick.label2On = False
tick.tick1On = True
tick.tick2On = False
for tick in ax.xaxis.get_major_ticks():
tick.label1On = True
tick.label2On = False
tick.tick1On = True
tick.tick2On = False
for tick in ax2.yaxis.get_major_ticks():
tick.label1On = False
tick.label2On = True
tick.tick1On = False
tick.tick2On = True
for tick in ax2.xaxis.get_major_ticks():
tick.label1On = False
tick.label2On = True
tick.tick1On = False
tick.tick2On = True
ax.scatter([0.4],[0.6])
ax2.scatter([10.],[10.])
draw()
###
------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options