# Increasing the thickness of minimum of two curves while keeping their coloring the same

Let's say I am plotting

Plot[{Sin[x], Cos[x]}, {x, 0, 2 π}, PlotStyle -> {Thickness[0.01], Thickness[0.01]}]


I want to keep the same colors for the two functions — $\sin(x)$ and $\cos(x)$ — but want to increase the thickness of the minimum of two functions for each value of $x$. What is the easiest way to do that?

### Edit

I want to clarify what I meant. Let's say the colors of the two functions f1 and f2 are blue and red and thickness for both functions is 0.01. Now for each x, I just want to increase the thickness of the function $min(f1, f2)$ in the same plot while keeping the blue and red colors separately for f1 and f2.

• Do you mean you want varying thickness along the curve, depending on which curve is on top? – Thies Heidecke Jul 26 '17 at 12:43
• Thies, yes, exactly. – cleanplay Jul 26 '17 at 12:50
• You could either achieve this by calling Plot[{Min[f1[x],f2[x]],Max[f1[x],f2[x]]}] and giving it different PlotStyles or by cutting the curves in segments where they cross and giving them individual PlotStyles. – Thies Heidecke Jul 26 '17 at 12:51
• possible duplicate: Plot the minimum of a list of functions – kglr Jul 26 '17 at 13:47
• @Mr.Wizard, this answer in the linked q/a works for this case too. – kglr Jul 26 '17 at 14:07

Perhaps this is what you are looking for.

minSin[x_] /; Sin[x] < Cos[x] := Sin[x]
minCos[x_] /; Sin[x] > Cos[x] := Cos[x]
maxSin[x_] /; Sin[x] > Cos[x] := Sin[x]
maxCos[x_] /; Sin[x] < Cos[x] := Cos[x]

Plot[{minSin[x], maxSin[x], minCos[x], maxCos[x]}, {x, 0, 2 π},
PlotStyle ->
{{Blue, Thickness[0.02]}, {Blue, Thickness[0.01]},
{Red, Thickness[0.02]}, {Red, Thickness[0.01]}}] Choose two colors:

{c1,c2}={ColorData[97, 1], ColorData[97, 2]}


Define a custom color function:

myColorFunction[x_] := If[Cos[x] > Sin[x], c1,c2]


Generate two plots (because you can't specify two different color functions in the same plot) and combine them:

g1 = Plot[{Sin[x], Cos[x]}, {x, 0, 2 Pi}, PlotStyle -> {c1,c2}];
g2 = Plot[Min[Sin[x], Cos[x]], {x, 0, 2 Pi},
PlotStyle -> Thickness[0.015], ColorFunctionScaling -> False,
ColorFunction -> (myColorFunction[#1] &), Exclusions -> None];
Show[g2, g1, PlotRange -> {-1,1}]


Voilà: flist = {Sin[x], Cos[x]};
pieces = Table[ConditionalExpression[f, f == Min[flist]], {f, flist}];
pltstyls = Join[#, Directive[{#, Thickness[.007]}] & /@ #] &[
ColorData[97, "ColorList"][[;; Length@flist]]];

Plot[Evaluate@Join[flist, pieces], {x, 0, 10}, PlotStyle -> pltstyls] More generally, for arbitrary number of functions and filling:

flist = {Sin[x], Cos[x], x Sin[x]/2};
pieces = Table[ConditionalExpression[f, f == Min[flist]], {f, flist}];
pltstyls = Join[#, Directive[{#, Thickness[.007]}] & /@ #] &[
ColorData[97, "ColorList"][[;; Length@flist]]];

Plot[Evaluate@Join[flist, pieces], {x, 0, 10}, Filling -> filling, PlotStyle -> pltstyls] • I think the filling and the third line obfuscate this somewhat, but +1 nevertheless. – Mr.Wizard Jul 26 '17 at 14:17
• Thank you @Mr.Wizard. – kglr Jul 26 '17 at 14:24

One way of doing this which works in this case would be:

Plot[Evaluate[MinMax[{#1, #2}]], {x, 0, 2 \[Pi]},
PlotStyle -> {Thickness[0.01], Thickness[0.02]},
ColorFunctionScaling -> False,
ColorFunction -> (ColorData[1 + Boole[Sin[#1] == #2]] &)
] &[Sin[x], Cos[x]] • I think this doesn't answer the OP's question - the intention was to keep the colors but vary the thickness. – yohbs Jul 26 '17 at 13:31
• Fixed my answer. – Thies Heidecke Jul 26 '17 at 15:23
• That's very nice. – Mr.Wizard Jul 26 '17 at 15:35

Applying a modification of my own method from Plot the minimum of a list of functions, and perhaps proving kglr's assertion that this question is a duplicate:

emph[fn_][a__] := Riffle[{a}, If[# == fn[a], #] & /@ {a}]

Plot[emph[Min][Sin[x], Cos[x]], {x, 0, 2 Pi}
, Evaluated -> True
, PlotStyle -> Tuples[{{Blue, Red}, AbsoluteThickness /@ {2, 4}}]
] 