3
$\begingroup$

I have the following piece of code that uses ListLinePlot to plot 3 curves which I would like to each have a hatched filling of different colors. I've tried a couple of approaches I found on this website, but didn't succeed, alas. Would appreciate any help.

ClearAll[Evaluate[Context[] <> "*"]];

Subscript[t, min] = 0;
Subscript[t, max] = 10;
dt = 0.01;

μ = 1;
ν = Subscript[t, max]/2;

SetAttributes[driftf, Listable];
driftf[t_] := If[t < ν, 0, μ (t - ν)];

tpath = {0, ν, Subscript[t, max]};
driftpath = TemporalData[driftf[tpath], {tpath}];

w = WienerProcess[];
wpath = RandomFunction[w, {Subscript[t, min], Subscript[t, max], dt}];
tdata = wpath["Paths"][[1]][[All, 1]];
xdata = wpath["Paths"][[1]][[All, 2]];
xdata = xdata + driftf[tdata];
xpath = TemporalData[xdata, {tdata}];

lp = ListLinePlot[{wpath, driftpath, xpath},
  Filling -> Axis, 
  AxesStyle -> Arrowheads[0.02],
  PlotRange -> {{0, Subscript[t, max]}, {-6, 6}},
  Frame -> True,
  FrameLabel -> {"Time", "Observed Process"},
  GridLines -> Automatic,
  RotateLabel -> True,
  PlotLegends -> 
     Placed[LineLegend[{"aaa", "bbb", "ccc"},
       LabelStyle -> {GrayLevel[0.3], Bold, 11}, 
       LegendLayout -> {"Row", 1}], {0.45, 0.75}]]

newticks = Last @ First[AbsoluteOptions[lp, FrameTicks]];
newticks[[All, All, 2]] = Spacer[0];

Show[lp, FrameTicks -> newticks]

This is what the code outputs:output

$\endgroup$
0

3 Answers 3

5
$\begingroup$

Update: Using Mesh and MeshFunctions with ParametricPlot

Show[ParametricPlot[{x, v #["PathFunction"][x]}, {x, 0, 10}, {v, 0, 1}, 
      BoundaryStyle -> Directive[{Thick, #2}], PlotStyle -> #2, 
      MeshFunctions -> #3, Mesh -> 50, MeshShading -> {Opacity[0]}, 
      MeshStyle -> Directive[{Thick, Lighter@#2}], 
      ImageSize -> 500] & @@ # & /@ 
  Transpose[{{xpath, wpath}, ColorData[63, "ColorList"][[2 ;; 3]], {{# - #2 &}, {# + #2 &}}}], 
 PlotRange -> All]

enter image description here

Show[ParametricPlot[{x, v #["PathFunction"][x]}, {x, 0, 10}, {v, 0,1},
      BoundaryStyle -> Directive[{Thick, #2}], PlotStyle -> #2, 
      MeshFunctions -> #3, Mesh -> 50, 
      MeshShading -> {Opacity[0], Directive[{Opacity[.5], #2}]}, 
      ImageSize -> 500] & @@ # & /@ 
  Transpose[{{xpath, wpath}, ColorData[63, "ColorList"][[2 ;; 3]], 
            {{# - #2 &}, {# + #2 &}}}], PlotRange -> All]

enter image description here


Previous post:

Using the function hatchingF used in a related Q/A to generate hatched textures:

lp = ListLinePlot[{wpath, driftpath, xpath}, Filling -> Axis, 
   AxesStyle -> Arrowheads[0.02], 
   PlotRange -> {{0, Subscript[t, max]}, {-6, 6}}, Frame -> True, 
   FrameLabel -> {"Time", "Observed Process"}, GridLines -> Automatic,
    RotateLabel -> True, 
   PlotLegends -> Placed[LineLegend[{"aaa", "bbb", "ccc"}, 
      LabelStyle -> {GrayLevel[0.3], Bold, 11}, 
      LegendLayout -> {"Row", 1}], {0.45, 0.75}]];

texture1 = Texture[Rasterize@ hatchingF["single", {{1, 1/2}, {1, 1}}, 70, 
     Directive[{Thick, ColorData[1, "ColorList"][[1]]}]]];
texture2 = Texture[Rasterize@hatchingF["single", {{-2, 1}, {1, 1}}, 70, 
     Directive[{Thick, ColorData[1, "ColorList"][[3]]}]]];

rp1 = RegionPlot[((0 < y < wpath["PathFunction"][x] || 
      0 > y > wpath["PathFunction"][x])), {x, 0, 10}, {y, -6, 6}, 
   PlotStyle -> texture1, Background -> Transparent];
rp2 = RegionPlot[((0 < y < xpath["PathFunction"][x] || 
      0 > y > xpath["PathFunction"][x])), {x, 0, 10}, {y, -6, 6}, 
   PlotStyle -> texture2, Background -> Transparent];

Show[rp2, rp1, lp]

enter image description here

$\endgroup$
2
  • $\begingroup$ Great, many thanks. $\endgroup$
    – Alex
    Commented Oct 27, 2014 at 23:11
  • $\begingroup$ @Alex, my pleasure. Thanks for the Accept and welcome to Mathematica.SE. $\endgroup$
    – kglr
    Commented Oct 27, 2014 at 23:17
5
$\begingroup$

Since Mathematica 12.1 it is possible to do this with HatchFilling:

ListLinePlot[
    Table[2 Sin[x] + x, {x, 0, 15, 0.1}], Filling -> Bottom, 
    FillingStyle -> HatchFilling[-Pi/4, 2, 10]]

enter image description here

Of course, the hashing can be styled in many ways.

$\endgroup$
3
$\begingroup$

I guess I learned this from @Rojo ... but not completely sure. Anyway:

Show[{lp,
  RegionPlot[
   ((0 < y < wpath["PathFunction"][x] || 0 > y > wpath["PathFunction"][x])),
   {x, 0, 10}, {y, -6, 6}, Mesh -> 50, MeshFunctions -> { #1 - #2 &}, BoundaryStyle -> None, 
   MeshStyle -> Thickness[.001], PlotStyle -> Transparent]}, FrameTicks -> newticks]

Mathematica graphics

$\endgroup$
1
  • $\begingroup$ Great, thanks much. $\endgroup$
    – Alex
    Commented Oct 27, 2014 at 2:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.