Re: Manipulate[] and ticks --- offset to avoid collision?
- To: mathgroup at smc.vnet.net
- Subject: [mg108802] Re: Manipulate[] and ticks --- offset to avoid collision?
- From: telefunkenvf14 <rgorka at gmail.com>
- Date: Thu, 1 Apr 2010 05:59:55 -0500 (EST)
- References: <hov81e$92u$1@smc.vnet.net>
On Mar 31, 5:26 am, telefunkenvf14 <rgo... at gmail.com> wrote: > Mathgroup: > > I am currently able to construct a manipulatable plot of a supply and > demand diagram that includes custom tick marks, set to dynamically > display the current equilibrium price and quantity. > > Question: Can someone explain how to add an additional set of custom > tick marks that display 'lower' (on the x axis) and 'to the left' (on > the y axis) of my 'main' tick marks, so I don't have tick-mark > collisions? > > (FYI, the second set of tick marks would be linked to shifted copies > of the original demand and supply curves. So far, the best workaround > I've come up with is to use conditional statements, such as Which[] or > nested If[], to switch the additional tick marks on or off based on > proximity to my 'main' ticks.) > > Any help, or other creative ideas, would be greatly appreciated. > > -RG Well, I played around and something like this works, but I'd still be interested in suggestions for improvement. One idea I haven't yet tried to implement: a Checkbox[ ] to show or hide sets of ticks. Could someone help with that? (*First, a couple of convenience functions called by the plotting routine*) inverseLinear[name_,priceVariable_,a_,b_,shift_]:= ( priceVariable==(a+shift)+ b*name ) linearMarket[name_,priceVariable_,s0_,s1_,d0_,d1_,sShift_,dShift_]:= { name-> -((-d0-dShift+s0+sShift)/(-d1+s1)), priceVariable-> -((-d1*s0+d0*s1+dShift*s1-d1*sShift)/(d1-s1)) } (*Here's my Plot[ ]*) linearMarketPlot[name_,priceVariable_,s0_,s1_,d0_,d1_,sShift_,dShift_]:= Module[ {marketTitleName,sols1,sols2,eqY1,eqY2,eqP1,eqP2}, marketTitleName = MapAt[ToUpperCase[#1]&,Characters[ToString[name]],1]//StringJoin; sols1=linearMarket[name,priceVariable,s0,s1,d0,d1,0,0]//N; eqY1=sols1[[1,2]]; eqP1=sols1[[2,2]]; sols2=linearMarket[name,priceVariable,s0,s1,d0,d1,sShift,dShift]//N; eqY2=sols2[[1,2]]; eqP2=sols2[[2,2]]; Plot[ {inverseLinear[name,priceVariable,s0,s1,sShift] [[2]],inverseLinear[name,priceVariable,s0,s1,0][[2]], inverseLinear[name,priceVariable,d0,d1,dShift] [[2]],inverseLinear[name,priceVariable,d0,d1,0][[2]]},{name,0,d0*1.1}, AxesOrigin->{0,0}, PlotRange->{0,d0*1.2}, PlotStyle- >{Directive[Thick,Dashed,Darker[Blue]],Directive[Thick,Darker[Blue]], Directive[Thick,Dashed,Purple],Directive[Thick,Purple]}, PlotLabel->Style[marketTitleName<>" Market",FontFamily- >"Calibri",Bold,14], AxesLabel->{name,priceVariable}, Ticks-> { {{eqY1,"\!\(\*SubscriptBox[\"q\", \"1\"]\)"<>" = "<>ToString[NumberForm[eqY1,{10,2}]]},{eqY2,"\<\n\!\(\) \> "<>ToString[NumberForm[eqY2,{10,2}]]}}, {{eqP1,"\!\(\*SubscriptBox[\"p\", \"1\"]\)"<>" = "<>ToString[NumberForm[eqP1,{10,2}]]},{eqP2,ToString[NumberForm[eqP2, {10,2}]]}} }, TicksStyle->Directive[9,Thin], LabelStyle->{FontFamily->"Calibri",Bold,12}, Prolog-> { {Thick,Lighter@Gray,Dotted,Line[{{eqY1,0}, {eqY1,eqP1}}]}, {Thick,Lighter@Gray,Dotted,Line[{{0,eqP1}, {eqY1,eqP1}}]}, {Thick,Gray,Dotted,Line[{{eqY2,0},{eqY2,eqP2}}]}, {Thick,Gray,Dotted,Line[{{0,eqP2},{eqY2,eqP2}}]} }, Epilog-> { {PointSize[0.025],Point[{eqY2,eqP2}]}, {PointSize[0.025],Point[{eqY1,eqP1}]} } ] ] (*Here is an example Manipulate[ ]*) DynamicModule[{sShift, dShift}, Manipulate[linearMarketPlot[apples, p, 1, 1, 100, -1, sShift, dShift], {{sShift, 0, "Supply Shift"}, -50, 50}, {{dShift, 0, "Demand Shift"}, -50, 50}, TrackedSymbols :> {sShift, dShift} ] ]