First, a function to produce dots to be used as filling:
dotsF[n_: {50, 50}, sz_: Medium, clr_: LightGray] :=
With[{g = Tuples[{Range[n[[1]]], Range[n[[2]]]}]}, Graphics[{clr, PointSize[sz], Point@g},
ImagePadding -> 0, PlotRangeClipping -> False, PlotRangePadding -> 0, AspectRatio -> 1]]
dotsF[{10, 10}, .1, Green]
It will be more convenient to render the pieces separately so that we can generate legend icons for various components:
pltc3 = Plot[c3[u], {u, 0, 1}, PlotStyle -> Directive[Thick, Opacity[1], Red], Axes -> False,
Frame -> False, AspectRatio -> 1];
pltd = Plot[d[u], {u, 0, 1}, PlotStyle -> Directive[Thick, Opacity[1], Blue], Axes -> False,
Frame -> False, AspectRatio -> 1];
pltc1c2 = Plot[{c1[u], c2[u]}, {u, 0, 1},
PlotStyle -> Directive[Thick, Dashed, Black], Mesh -> {{\[Theta]}},
MeshStyle -> PointSize[.03], Axes -> False, Frame -> False, AspectRatio -> 1];
ParametricPlot
with dotted filling:
prmplt = ParametricPlot[{{u, (1 - v) Min[c1[u], c2[u]] + v c3[u]},
{u, (1 - v) Max[c1[u], c2[u]] + v c3[u]}}, {u, 0, 1}, {v, 0, 1},
Mesh -> None, PlotRange -> {{0, 1}, {0, 1}},
AspectRatio -> 1, BoundaryStyle -> Opacity[0], Axes -> False,
Frame -> False, AspectRatio -> (ar = .7),
PlotStyle -> {Directive[{Opacity[.7],
Texture[ImageMultiply[dotsF[{120, 120}, Tiny, Red], Orange]]}],
Directive[Opacity[.7], Orange]},
TextureCoordinateFunction -> ({#, ar #2} &),
TextureCoordinateScaling -> False];
show = Show[prmplt, pltd, pltc3, pltc1c2, PlotRange -> {{0, 1}, {0, 1}},
Axes -> True, Frame -> False, BaseStyle -> 18, AspectRatio -> .7,
AxesStyle -> Arrowheads[0.03`], GridLines -> Automatic, GridLinesStyle -> GrayLevel[0.85`],
AxesLabel -> {Style[Subscript[P, F], 21], Style[Subscript[P, M], 21]}, ImageSize -> 600]
Legend icons and labels:
labels = Style[#, 20, Bold] & /@ {Subscript["P", "M"], Subscript["\[ScriptL]", "3"],
Subscript["\[ScriptCapitalB]", "\[Theta]"],
Subscript["\[ScriptCapitalS]", "\[Theta]"],
Subscript["\[ScriptL]", "1|2"], "{\[Theta],\[Theta]}"};
icons = {pltd /. Thickness[_] :> Thickness[.05], pltc3 /. Thickness[_] :> Thickness[.05],
prmplt , ImageMultiply[dotsF[{7, 7}, .075, Orange], Orange],
pltc1c2 /. {Thickness[_] :> Thickness[.02],
Dashing[_] :> Dashing[.1], PointSize[_] :> PointSize[0]},
pltc1c2 /. {Thickness[_] :> Thickness[.01], PointSize[_] :> PointSize[.2]}};
legends = Labeled[#, #2, Right] & @@@ Transpose[{Thumbnail[#, 32] & /@ icons, labels}];
All together:
Legended[show, Placed[Panel@Column[legends, Spacings -> 1], {0.85, 0.6}]]
Update: New requirements from the comments:
I want to add this : LegendFunction -> (Framed[#, RoundingRadius -> 2, FrameStyle -> LightGray] &)
... make the box roundings a bit different and the legend transparent? so that the figure (and gridlines) staying at the background can be seen from the legend
prmplt2 = ParametricPlot[{{u, (1 - v) Min[c1[u], c2[u]] + v c3[u]},
{u, (1 - v) Max[c1[u], c2[u]] + v c3[u]}}, {u, 0, 1}, {v, 0, 1},
Mesh -> None,
PlotRange -> {{0.2, c2[.2]}, {.2, c2[.2]}}, AspectRatio -> 1,
BoundaryStyle -> Opacity[0], Axes -> False, Frame -> False,
AspectRatio -> (ar = .7),
PlotStyle -> {Directive[{Opacity[.7],
Texture[ImageMultiply[dotsF[{40, 40}, Medium, Darker@Red],
Orange]]}], Directive[Opacity[.7], Orange]},
TextureCoordinateFunction -> ({#, ar #2} &),
TextureCoordinateScaling -> False, PlotPoints -> 100];
icons = {Show[pltd, Background -> Transparent] /.
Thickness[_] :> Thickness[.05],
Show[pltc3, Background -> Transparent] /.
Thickness[_] :> Thickness[.05],
Show[prmplt2, Background -> Transparent],
ImageMultiply[dotsF[{7, 7}, .075, Orange], Orange],
Show[pltc1c2,
Background -> Transparent] /. {Thickness[_] :> Thickness[.02],
Dashing[_] :> Dashing[.1], PointSize[_] :> PointSize[0]},
Show[pltc1c2,
Background -> Transparent] /. {Thickness[_] :> Thickness[.01],
PointSize[_] :> PointSize[.2]}};
legends =
Labeled[#, #2, Right] & @@@
Transpose[{Thumbnail[#, 32] & /@ icons, labels}];
Legended[show,
Placed[Framed[Column[legends, Spacings -> .75], RoundingRadius -> 2,
FrameStyle -> LightGray], {0.85, 0.6}]]
... if one could make (one of the icons) a bit bigger:
legends2 = Labeled[#, #2, Right] & @@@
Transpose[{ReplacePart[Show[#, ImageSize -> 30] & /@ icons, {3} ->
Show[icons[[3]], ImageSize -> 50]], labels}];
Legended[show,
Placed[Framed[Column[legends2, Spacings -> .75], RoundingRadius -> 2,
FrameStyle -> LightGray], {0.85, 0.6}]]
Show
. Rather, add your black point using the optionEpilog -> {PointSize[0.02], Black, Point[{θ, θ}]}
. $\endgroup$Graphics[{Texture[ Graphics[Disk[], Background -> LightOrange, PlotRangePadding -> Scaled[.25]]], Polygon[{{0.5, 0}, {2 \[Theta], 0}, {0, 2 \[Theta]}, {0, 0.5}, {\[Theta], \[Theta]}}, VertexTextureCoordinates -> 50 {{0.5, 0}, {2 \[Theta], 0}, {0, 2 \[Theta]}, {0, 0.5}, {\[Theta], \[Theta]}}]}]
? $\endgroup$