From: <ato...@gm...> - 2005-08-17 07:32:19
|
Hello, I am trying to prepare a plot with two panels. Both panels have different u= nits on x1 and x2 axes, but lower panel's x1 is the same as upper panel's x1 and same with x2. Since I will put these panels one above the other, I want to suppress lower panel's upper axis and upper panel's lower axis. But when I = use x2=3Daxis.linear(min=3D..., max=3D...) I get tick labels. Is there a way t= o suppress them, or a way to obtain different scaling for ticks which will not create labels in the first place? thanks a lot, atakan |
From: Andre W. <wo...@us...> - 2005-08-17 08:59:11
|
Hi, On 17.08.05, M Atakan Gürkan wrote: > I am trying to prepare a plot with two panels. Both panels have different units > on x1 and x2 axes, but lower panel's x1 is the same as upper panel's x1 and > same with x2. Since I will put these panels one above the other, I want to > suppress lower panel's upper axis and upper panel's lower axis. But when I use > x2=axis.linear(min=..., max=...) I get tick labels. Is there a way to > suppress them, > or a way to obtain different scaling for ticks which will not create > labels in the > first place? In principle it is quite easy to supress labels by setting the textattrs list to None in the painter. However, this will sometimes alter the partitioning, since the distance between the labels it taken into account when calculating the best partition scheme. But you can also create "phantom text" (a feature you may know from TeX/LaTeX as well). So the code would look like: from pyx import * c = canvas.canvas() # hiding the labels completely might result in different ratings: # hidelabelpainter = graph.axis.painter.regular(labelattrs=None) # its better to use phantom to hide the labels, but take them into account for the rating: hidelabelpainter = graph.axis.painter.regular(labelattrs=[text.phantom]) g1 = c.insert(graph.graphxy(width=4, x=graph.axis.lin(min=0, max=1000), x2=graph.axis.lin(min=-1000, max=0, painter=hidelabelpainter), y=graph.axis.lin(min=0, max=1))) g2 = c.insert(graph.graphxy(width=4, ypos=g1.height+0.5, x=graph.axis.lin(min=0, max=1000, painter=hidelabelpainter), x2=graph.axis.lin(min=-1000, max=0), y=graph.axis.lin(min=0, max=1))) c.writeEPSfile("link") As you can see, I've not used any linkaxes here and set the ranges manually. This is because we can't simply link between both panels. I would suggest to live with that for the moment. However, I think this is a funny idea to improve the linking facilities and I'll think about supporting this in future versions. For the moment we can do some dirty tricks to achieve that, but it's nothing I would suggest officially ... ;-) André -- by _ _ _ Dr. André Wobst / \ \ / ) wo...@us..., http://www.wobsta.de/ / _ \ \/\/ / PyX - High quality PostScript and PDF figures (_/ \_)_/\_/ with Python & TeX: visit http://pyx.sourceforge.net/ |
From: <ato...@gm...> - 2005-08-17 10:25:18
|
On 8/17/05, Andre Wobst <wo...@us...> wrote: > Hi, >=20 > On 17.08.05, M Atakan G=FCrkan wrote: > > I am trying to prepare a plot with two panels. Both panels have differe= nt units > > on x1 and x2 axes, but lower panel's x1 is the same as upper panel's x1= and > > same with x2. Since I will put these panels one above the other, I want= to > > suppress lower panel's upper axis and upper panel's lower axis. But whe= n I use > > x2=3Daxis.linear(min=3D..., max=3D...) I get tick labels. Is there a w= ay to > > suppress them, > > or a way to obtain different scaling for ticks which will not create > > labels in the > > first place? >=20 > In principle it is quite easy to supress labels by setting the > textattrs list to None in the painter. However, this will sometimes > alter the partitioning, since the distance between the labels it taken > into account when calculating the best partition scheme. But you can > also create "phantom text" (a feature you may know from TeX/LaTeX as > well). So the code would look like: >=20 > from pyx import * >=20 > c =3D canvas.canvas() >=20 > # hiding the labels completely might result in different ratings: > # hidelabelpainter =3D graph.axis.painter.regular(labelattrs=3DNone) >=20 > # its better to use phantom to hide the labels, but take them into ac= count for the rating: > hidelabelpainter =3D graph.axis.painter.regular(labelattrs=3D[text.ph= antom]) >=20 > g1 =3D c.insert(graph.graphxy(width=3D4, > x=3Dgraph.axis.lin(min=3D0, max=3D1000), > x2=3Dgraph.axis.lin(min=3D-1000, max=3D0,= painter=3Dhidelabelpainter), > y=3Dgraph.axis.lin(min=3D0, max=3D1))) >=20 > g2 =3D c.insert(graph.graphxy(width=3D4, ypos=3Dg1.height+0.5, > x=3Dgraph.axis.lin(min=3D0, max=3D1000, p= ainter=3Dhidelabelpainter), > x2=3Dgraph.axis.lin(min=3D-1000, max=3D0)= , > y=3Dgraph.axis.lin(min=3D0, max=3D1))) >=20 > c.writeEPSfile("link") >=20 > As you can see, I've not used any linkaxes here and set the ranges > manually. This is because we can't simply link between both panels. I > would suggest to live with that for the moment. However, I think this > is a funny idea to improve the linking facilities and I'll think about > supporting this in future versions. For the moment we can do some > dirty tricks to achieve that, but it's nothing I would suggest > officially ... ;-) >=20 >=20 > Andr=E9 >=20 > -- > by _ _ _ Dr. Andr=E9 Wobst > / \ \ / ) wo...@us..., http://www.wobsta.de/ > / _ \ \/\/ / PyX - High quality PostScript and PDF figures > (_/ \_)_/\_/ with Python & TeX: visit http://pyx.sourceforge.net/ >=20 >=20 Thanks a lot! I was first making the plot and suppressing the labels with manualticks/lab= el=3D"" after determining which ticks are labelled, which was very ugly and not=20 automated. I will switch to your method :-) atakan |