Re: Equi-sized tick labels

*To*: mathgroup at smc.vnet.net*Subject*: [mg85309] Re: Equi-sized tick labels*From*: "David Park" <djmpark at comcast.net>*Date*: Tue, 5 Feb 2008 19:43:40 -0500 (EST)*References*: <fo9fia$s3i$1@smc.vnet.net>

I wonder about this. There is a bug in Mathematica graphics such that when one supplies one's own Tick specifications, the plot does not initially display the correct tick lengths on the x-axis. But if you select the plot and resize it, then the x ticks will snap to the specification. If you go with the Automatic Ticks then the problem does not occur. I prepared some Tick specifications using your prescription. I did it using Presentations, which I will show for record, but I will also copy the resulting Tick specifications into the posting. I did use a more rectangular AspectRatio because the bug is more apparent then. Needs["Presentations`Master`"] With[ {ticksize = 0.02, smallticksize = 0.01, aspectratio = 0.4}, xticks = CustomTicks[Identity, {0, 3.5, 1, 5}, CTTickSpecs -> {ticksize, 0}, CTUnLabTickSpecs -> {smallticksize, 0}]; yticks = CustomTicks[Identity, {0, 3.5, 1, 5}, CTTickSpecs -> {ticksize/aspectratio, 0}, CTUnLabTickSpecs -> {smallticksize/aspectratio, 0}];] So here is the example: xticks = {{0, 0, {0.02, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {1, 1, {0.02, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {2, 2, {0.02, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {3, 3, {0.02, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {1/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {2/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {3/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {4/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {6/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {7/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {8/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {9/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {11/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {12/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {13/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {14/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {16/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {17/5, "", {0.01, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}} yticks = {{0, 0, {0.05, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {1, 1, {0.05, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {2, 2, {0.05, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {3, 3, {0.05, 0}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {1/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {2/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {3/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {4/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {6/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {7/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {8/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {9/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {11/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {12/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {13/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {14/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {16/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}, {17/5, "", {0.025, 0}, {GrayLevel[0.], AbsoluteThickness[0.125]}}} With[ {ticksize = 0.02, smallticksize = 0.01, aspectratio = 0.4, padratio = 1.5}, SetOptions[Plot, AspectRatio -> aspectratio, Frame -> True, FrameTicks -> {{yticks, Automatic}, {xticks, Automatic}}, PlotRangePadding -> {Scaled[padratio ticksize], Scaled[padratio ticksize/aspectratio]}, ImageSize -> 450]; Plot[x, {x, 0, \[Pi]}]] The xticks and yticks don't look anywhere the same size. Furthermore, if you select and adjust the size of the plot you will see that the x ticks snap to a new larger size. (The Automatic ticks are unaffected.) Unless I'm making some error, I don't see that this method works and, in any case, the bug of an incorrect initial display (without resizing) is still there. -- David Park djmpark at comcast.net http://home.comcast.net/~djmpark/ "Will Robertson" <wspr81 at gmail.com> wrote in message news:fo9fia$s3i$1 at smc.vnet.net... > Dear all, > > When Mathematica creates tick marks in plots, it uses a ratio of the > plot size to calculate their length. Unfortunately, it treats > horizontal and vertical sizes separately so non-square plots will have > unequal tick marks in the two different directions. This can look > rather ugly, in my opinion. > > Luckily, it's an easy problem to fix. Please find attached some code > to "normalise" the length of the ticks used in plots so that non- > square plots don't have uneven ticks horizontally and vertically. It > uses the CustomTicks package, whose author I shall contact about > rolling this functionality into his package. > > Have fun, > Will > > Here is the code. It may be modified and distributed freely under the > Apache Licence, v2. > > << "CustomTicks`" > > ticksize := 0.02 > smallticksize := 0.01 > aspectratio := 0.8 > padratio := 1.5 > > XTicks[a_, b_, opts___] := LinTicks[a, b, > MajorTickLength -> {ticksize, 0}, > MinorTickLength -> {smallticksize, 0}, > opts > ] > YTicks[a_, b_, opts___] := LinTicks[a, b, > MajorTickLength -> {ticksize/aspectratio, 0}, > MinorTickLength -> {smallticksize/aspectratio, 0}, > opts > ] > > EmptyXTicks[a_, b_] := XTicks[a, b, ShowTickLabels -> False] > EmptyYTicks[a_, b_] := YTicks[a, b, ShowTickLabels -> False] > > SetOptions[Plot, Frame -> True, AspectRatio -> aspectratio, > FrameTicks -> {{XTicks, EmptyXTicks}, {YTicks, EmptyYTicks}}, > PlotRangePadding -> > {Scaled[padratio*ticksize], > Scaled[padratio*ticksize/aspectratio]}]; > Plot[x, {x, 0, \[Pi]}] >