Re: How to pass additional parameters to the ticks function?
- To: mathgroup at smc.vnet.net
- Subject: [mg108646] Re: How to pass additional parameters to the ticks function?
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Fri, 26 Mar 2010 05:34:50 -0500 (EST)
On 3/25/2010 11:20 AM, Nasser M. Abbasi wrote: > > ----- Original Message ----- From: "Carl K. Woll" <carlw at wolfram.com> > To: "Nasser M. Abbasi" <nma at 12000.org> > Cc: <mathgroup at smc.vnet.net> > Sent: Thursday, March 25, 2010 4:46 AM > Subject: Re: [mg108629] How to pass additional parameters to the ticks > function? > > >> On 3/25/2010 5:28 AM, Nasser M. Abbasi wrote: >>> background: >>> >>> When plotting, one can supply a specific tick function, which is >>> automatically called by the Plot code. This allows one to have >>> control on >>> how the ticks are set. >>> >>> This is useful. Here is an example: >>> >>> ------------------------------ >>> ticksX[min_, max_] := Table[{i, Style[i, Red, 12], {0.04, 0}}, >>> {i, Ceiling[min], Floor[max]}] >>> >>> Plot[Sin[x], {x, 0, 4}, Ticks -> {ticksX, Automatic}] >>> ------------------------------- >>> >>> The only problem with the above design, is that sometimes one might >>> want to >>> have additional information inside the ticks function, other than >>> just the >>> min and the max ticks values, to help it decide what to do. >>> >>> Assume this additional information is some variable, say T. >>> >>> Right now, the only way to access this variable from inside the ticks >>> function, is to have T be global. I prefer not to use global >>> variables/symbols. >>> >>> It would be much better if Ticks would take additional, and optional >>> parameter, to pass to the ticks function. >>> >>> May be something like >>> >>> ------------------------------------ >>> ticksX[min_, max_,extra_List] := If[ extra[[1]]==.... etc.....] >>> >>> >>> Plot[Sin[x], {x, 0, 4}, Ticks -> {ticksX[{T}], Automatic}] >>> --------------------------------------- >>> >>> And now inside my ticks function, I can access the additional >>> information if >>> I want to use it to help me set the ticks. >>> >>> If the above is not possible in version 7, is it possible to make this >>> enhancement available in version 8? >>> >>> --Nasser >>> >>> > > >> Why can't you do: >> >> ticksX[extra_][min_,max_] := If[... >> >> ? >> >> Carl Woll >> Wolfram Research > > > Thanks Carl. That worked! But how did you know that? When I looked at > the documenation for Ticks function, it only talks about min,max: > > "The tick mark function func[Subscript[x, min],Subscript[x, max]] may > return any other tick mark option." So, in this case your func is ticksX[extra], and as the above says, the graphics routine does ticksX[extra][min, max] to find out what the ticks should be. > > and all the examples, shows only min,max arguments. So I did not know > I can pass additional arguments (may be I should have tried). > > Or is this trick common in general? How does one know which function > then takes extra arguments like this or not? And why did you type it as > > ticksX[extra_][min_,max_] > > and not as > > ticksX[min_,max_,extra_] You could do: Ticks -> {ticksX[##, extra]&, Automatic} as well using your original definition of ticksX. Basically, if a tick spec is not a list (or Automatic), then the graphics routine will assume that the spec is a function and feed it min, max. Carl > > Is there an advantage of one over the other? > > --Nasser