RE: RE: filled plot on part of x-interval
- To: mathgroup at smc.vnet.net
- Subject: [mg44649] RE: [mg44622] RE: [mg44599] filled plot on part of x-interval
- From: "David Park" <djmp at earthlink.net>
- Date: Wed, 19 Nov 2003 04:59:14 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Hartmut, Or if you have the DrawGraphics from my web site below you can avoid all these complications with... Needs["DrawGraphics`DrawingMaster`"] f[t_] := (t/7.5)^2 + Sin[t] Draw2D[ {FilledDraw[f[t], {t, 2, 9}, Fills -> SkyBlue], Draw[f[t], {t, 0, 2}], Draw[f[t], {t, 9, 10}]}, Axes -> True, AxesFront -> True, ImageSize -> 500]; David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Wolf, Hartmut [mailto:Hartmut.Wolf at t-systems.com] To: mathgroup at smc.vnet.net Subject: [mg44649] [mg44622] RE: [mg44599] filled plot on part of x-interval >From: Murray Eisenberg [mailto:murray at math.umass.edu] To: mathgroup at smc.vnet.net > >How do I use a FilledPlot that fills the region under the >graph of f[x] >only, say, for x from 2 to 10 but still graphs the function >itself from >0 to 10? > >-- >Murray Eisenberg murray at math.umass.edu >Mathematics & Statistics Dept. >Lederle Graduate Research Tower phone 413 549-1020 (H) >University of Massachusetts 413 545-2859 (W) >710 North Pleasant Street fax 413 545-1801 >Amherst, MA 01003-9305 > A simple trick would be: In[1]:= << Graphics`FilledPlot` In[3]:= f[t_] := (t/7.5)^2 + Sin[t] In[4]:= g[t_] := f[t] /; t < 2 || t > 9 In[5]:= g[t_] := 0 /; 2 <= t <= 9 In[6]:= FilledPlot[{f[t], g[t]}, {t, 0, 10}] The result is not quite perfect, as below and above the shaded region, the function is plotted twice (at different sampling), and vertical lines are visible at the borders of the shaded region. In[7]:= filled = FilledPlot[f[t], {t, 2, 9}, Fills -> {Hue[2/3, .5, 1]}, DisplayFunction -> Identity] In[8]:= Plot[f[t], {t, 0, 10}, Prolog -> filled[[1, 2, 1, 1]], PlotStyle -> {GrayLevel[0]}, DisplayFunction -> $DisplayFunction] Here only the polygon for the shading is retained from filled, but again at different sampling (such you may see some small open gaps, or the line blurred over). Furthermore, the abscissa got partially hidden. In[9]:= pl = Plot[f[t], {t, 0, 10}, DisplayFunction -> Identity] In[10]:= Show[pl, Graphics[filled[[1, 2, 1, 1]]], pl, DisplayFunction -> $DisplayFunction, AxesFront -> True] This makes the axis visible in full, but shares the remaining defects. With simple means, this was most satisfying to me: In[11]:= plow = Plot[f[t], {t, 0, 2}, DisplayFunction -> Identity] In[12]:= plhi = Plot[f[t], {t, 9, 10}, DisplayFunction -> Identity] In[13]:= Show[plow, filled, plhi, DisplayFunction -> $DisplayFunction, AxesFront -> True] If you don't mind switching off an error message, you may do In[20]:= g1[t_] := f[t] /; t < 2 || t > 9 In[21]:= g2[t_] := f[t] /; 2 <= t <= 9 In[22]:= Off[Plot::"plnr"] In[23]:= FilledPlot[{g1[t], g2[t]}, {t, 0, 10}, Fills -> {{{2, Axis}, Hue[1/3, .5, 1]}}] You may seperate concerns a bit: In[31]:= \[Theta]1[t_, {min_, max_}] := 1 /; t < min || t > max In[32]:= \[Theta]2[t_, {min_, max_}] := 1 /; min <= t <= max In[33]:= \[Theta][t_, {min_, max_}] := Through[{\[Theta]1, \[Theta]2}[t, {min, max}]] (a strange "partition of unity") In[34]:= Off[Plot::"plnr"] In[35]:= FilledPlot[f[t]*\[Theta][t, {2, 9}], {t, 0, 10}, Fills -> {{{2, Axis}, Hue[1/3, .5, 1]}}] If you want to have shading between several curves, just do e.g. In[36]:= FilledPlot[Append[Cos[t] \[Theta][t, {2, 9}], Sin[t]], {t, 0, 10}, Fills -> {{{2, 3}, Hue[1/6, .5, 1]}}] In[38]:= On[Plot::"plnr"] -- Hartmut Wolf