MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

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


  • Prev by Date: Re: math =!= mathematica
  • Next by Date: Re: math =!= mathematica
  • Previous by thread: Re: How to pass additional parameters to the ticks function?
  • Next by thread: 15! permutations