Hi,
I'd like to have figure with 3 (or 4) plots having different scales
but sharing the same x-axis.
Basically I want an extension of the twinx command (see, e.g,
two_scales.py demo).
I'm using 0.91.2svn on MacOSX10.5.1 from http://trichech.us/?page_id=5

I've tried the following hack (creating very narrow axes for the 3rd
y-axis), which seems to work reasonably well but leads to a thick tick 
line. As expected pan&zoom doesn't work for all axes.

-------------------------------------------------------------------
#!/usr/bin/env python
from pylab import *

# some functions to plot
x=linspace(0,2*pi,100)
y1=sin(x)
y2=10*cos(x)
y3=0.5*cos(2*x)

# create main axes
factor=0.9 # how much x-space is used by subaxes
am=axes(xticks=[])
pos = am.get_position()
pos[2] = factor*pos[2] # frame for subaxes

# first plot
a1=axes(pos,frameon=True)
p1=plot(x,y1,'b')
xlim(min(x),max(x))
xlabel("x")
a1.yaxis.tick_left()
ylabel("axis 1")

# second plot, y-axis on the right side
a2=axes(pos,frameon=False)
p2=plot(x,y2,'r')
xlim(a1.get_xlim())
a2.yaxis.tick_right()
a2.yaxis.set_label_position("right")
ylabel("axis 2")

# third plot, 2nd y-axis on the right side taken over by main axes
a3=axes(pos,frameon=False,yticks=[],xticks=[])
p3=plot(x,y3,'g')
xlim(min(x),max(x))

# legend for all three plots
legend((p1,p2,p3),('plot 1','plot 2','plot 3'),loc=0)

# now adjust settings for main axes
# draw y-axis of third plot
axes(am)
pos = am.get_position()
# move to right and make it a line
pos[0] += pos[2]
pos[2] = 0.001 # 0 doesn't work
am.set_position(pos)
# draw third y-axis
ylim(a3.get_ylim())
ylabel("axis 3")
am.yaxis.tick_right()
am.yaxis.set_label_position("right")

show()
-------------------------------------------------------------------

However, if I try to extend it to 4 y-axes (2 on each side)
I encounter several problems:

-------------------------------------------------------------------
#!/usr/bin/env python
from pylab import *

# some functions to plot
x=linspace(0,2*pi,100)
y1=sin(x)
y2=10*cos(x)
y3=0.5*cos(2*x)
y4=2*sin(0.5*x)

# create main axes
factor=0.1 # how much x-space is used by y-axes
am=axes(xticks=[])
pos = am.get_position() # frame for subaxes
pos[0] += factor*pos[2]
pos[2] = (1-2*factor)*pos[2] # frame for subaxes

# first plot, 2nd y-axis on the left side taken over by main axes
a1=axes(pos,frameon=False,yticks=[],xticks=[])
p1=plot(x,y1,'b')
xlim(min(x),max(x))
ylim1= a1.get_ylim() # bug: save as it is overwritten by plot4

# second plot, axis left
a2=axes(pos,frameon=True)
p2=plot(x,y2,'r')
xlim(a1.get_xlim())
xlabel("x")
a2.yaxis.tick_left()
ylabel("axis 2")

# third plot, y-axis on the right side
a3=axes(pos,frameon=False)
p3=plot(x,y3,'g')
xlim(a1.get_xlim())
a3.yaxis.tick_right()
a3.yaxis.set_label_position("right")
ylabel("axis 3")

# fourth plot, 2nd y-axis on the right side taken over by main axes
a4=axes(pos,frameon=False,yticks=[],xticks=[])
p4=plot(x,y4,'m')
xlim(a1.get_xlim())
ylim4 = a4.get_ylim()

# legend for all three plots
legend((p1,p2,p3,p4),('plot 1','plot 2','plot 3','plot 4'))

# now adjust settings for main axes
# draw y-axis of third plot
axes(am)
pos = am.get_position()
pos2 = array(pos)
pos[2] = 0.001
am.set_position(pos)
# draw third y-axis
am.set_ylim(ylim1)
a1.set_ylim(ylim1)
am.add_artist(a1)
ylabel("axis 1")
am.yaxis.tick_left()
am.yaxis.set_label_position("left")

# now adjust settings for main axes
# draw y-axis of fourth plot

# move to right and make it a line
pos2[0] += pos2[2]
pos2[2] = 0.001
am2 = axes(pos2,xticks=[])
# draw fourth y-axis
am2.set_ylim(ylim4)
a4.set_ylim(ylim4)
am2.add_artist(a4)
ylabel("axis 4")
am2.yaxis.tick_right()
am2.yaxis.set_label_position("right")

show()
-------------------------------------------------------------------

The 4th plot overwrites the ylim of the 1st plot (bug?).
Is there a limit of 3 axes per figure?
The ylim of plot4 is still ignored.
Why do I have to add the axes a1 and a4 the main axes to make them visible?

Any ideas?

cheers,
-- 
Thomas Tanner ----------------
email: [EMAIL PROTECTED]
phone: (+49) 7071 601 608
GnuPG key id: 1024/5924D4DD
Max Planck Institute for Biological Cybernetics
Spemannstrasse 38
72076 Tübingen, Germany







-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to