Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1996
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1996

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

Search the Archive

Re: [Q] Plotting non-continuous function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg4618] Re: [Q] Plotting non-continuous function
  • From: Allan Hayes <hay at haystack.demon.co.uk>
  • Date: Wed, 21 Aug 1996 03:25:34 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

pherron at GSB-Pound.Stanford.EDU (Michael C. Herron)
article <4s4itn$9ud at dragonfly.wolfram.com>

wants, amongst other things, to remove vertical asymptotes in Plot.

Michael:
Here is a way that does this automatically,

usage::PlotNV[f,r] =
"PlotNV[f,r] gives Plot[f,r] with all segments giving an apparent
absolute slope greater than 100 removed.\n,
PlotNV[f,r,ms] gives Plot[f,r] with all segments giving an apparent 
absolute,slope greater than ms removed.\n
All the options for Plot may be used."

METHOD
The method is to split all lines  Line[{p,q,r,s, ....}] into a list  
of segmets {Line[{p,q}], Line[{q,r}], ...} and delete those
segments giving "too big a slope".
The complication is to decide what "too big a slope" means.
I have taken it to mean that its slope looks to be greater than 100  
(in the default case).
I have also kept PlotRange unaffected by any deletions .


CODE

PlotNV[f_,r_List,ms:(_?NumberQ):100,o___?OptionQ]:=
Block[{pl,pr,rr,ar},
   Show[
      Block[{$DisplayFunction = Identity},
         pl = Plot[f,r,o];
	{pr,ar} = FullOptions[pl, {PlotRange, AspectRatio}];
         rr = Divide@@Subtract@@Transpose[pr];
         DeleteCases[
            pl/.Line[p_]:> Partition[p,2,1,Composition[Line,List]],
            Line[{a_,b_}]/;Abs[1/Divide@@(a-b)] rr ar >ms,
            Infinity
	]
      ],
      PlotRange -> pr
   ]
]

EXAMPLES
PlotNV[Tan[x],{x,0,7},PlotStyle -> Hue[0]]

f[x_] := Which [x<=5,2,True,10]
PlotNV[f[x], {x,0,20}, PlotRange -> {-2,10}]

Allan Hayes
hay at haystack.demon.co.uk

==== [MESSAGE SEPARATOR] ====


  • Prev by Date: BUG or FEATURE in Interpolation[] ?
  • Next by Date: Converting to PICT within an MMA program
  • Previous by thread: Re: BUG or FEATURE in Interpolation[] ?
  • Next by thread: Converting to PICT within an MMA program