Стили заполнения с использованием одного участка в Mathematica
Могу ли я указать разные цвета наполнения в пределах одного сюжета, например, ниже, или мне нужно "показать" несколько сюжетов? Скажем, я хотел бы, чтобы стиль заполнения был таким же, как PlotStyle.
priorMean = 50;
priorVar = 100;
llhMean = 30;
llhVar = 40;
postMean=35.71;
postVar=28.57;
Plot[
[email protected][
Function[{\[Mu], \[Sigma]},
PDF[NormalDistribution[\[Mu], Sqrt[\[Sigma]]], x]],
{{priorMean, llhMean, postMean}, {priorVar, llhVar, postVar}}],
{x, 0, 100}, Filling -> Axis, PlotStyle -> {Red, Green, Blue}]
![enter image description here]()
Ответы
Ответ 1
Вам нужно будет использовать FillingStyle
для заполнения. Я думаю, вы застряли в синтаксисе FillingStyle
, который не такой, как для PlotStyle
, хотя вы ожидаете, что это будет. Вам нужно назначить цвет для каждой кривой как FillingStyle -> {1 -> color1, 2 -> color2}
и т.д. Вот пример:
colors = {Red, Green, Blue};
Plot[[email protected]
MapThread[
Function[{\[Mu], \[Sigma]},
PDF[NormalDistribution[\[Mu], Sqrt[\[Sigma]]], x]], {{priorMean,
llhMean, postMean}, {priorVar, llhVar, postVar}}], {x, 0, 100},
Filling -> Axis, PlotStyle -> colors,
FillingStyle ->
MapIndexed[#2 -> Directive[Opacity[0.3], #] &, colors]]
![enter image description here]()
Ответ 2
Я предлагаю сделать расширение для определения Plot
. Я сделал это раньше.
toDirective[{ps__} | ps__] := Flatten[Directive @@ Flatten[{#}]] & /@ {ps}
makefills = MapIndexed[#2 -> Join @@ [email protected]{Opacity[0.3], #} &, #] &;
Unprotect[Plot];
Plot[a__, b : OptionsPattern[]] :=
Block[{$FSmatch = True},
With[{fills = [email protected][PlotStyle]},
Plot[a, FillingStyle -> fills, b]
]] /; ! TrueQ[$FSmatch] /; OptionValue[FillingStyle] === "Match"
С помощью этого места вы можете использовать FillingStyle -> "Match"
для автоматического создания заливок в соответствии с основными стилями.
Plot[{Sin[x], Cos[x], Log[x]}, {x, 0, 2 Pi},
PlotRange -> {-2, 2},
PlotStyle -> {{Blue, Dashing[{0.04, 0.01}]},
{Thick, Dashed, Orange},
{[email protected], Thick}},
Filling -> Axis,
FillingStyle -> "Match"
]
![Mathematica graphics]()
Ответ 3
Вы можете сделать что-то вроде
With[{colours = {Red, Green, Blue}},
Plot[[email protected]
MapThread[
Function[{\[Mu], \[Sigma]},
PDF[NormalDistribution[\[Mu], Sqrt[\[Sigma]]], x]],
{{priorMean, llhMean, postMean}, {priorVar, llhVar, postVar}}],
{x, 0, 100},
Filling ->
MapIndexed[#2[[1]] -> {Axis, Directive[Opacity[.3, #1]]} &, colours],
PlotStyle -> colours]]
![filling with different colours]()
Ответ 4
Получает результат:
Plot[[email protected]
MapThread[
Function[{\[Mu], \[Sigma]},
PDF[NormalDistribution[\[Mu], Sqrt[\[Sigma]]], x]], {{priorMean,
llhMean, postMean}, {priorVar, llhVar, postVar}}], {x, 0, 100},
Filling -> {1 -> {Axis, Red}, 2 -> {Axis, Green}, 3 -> {Axis, Blue}},
PlotStyle -> {Red, Green, Blue}]
Найдено в справке в FillingStyle, Scope, Filling Style.
И, альтернативно:
f = MapThread[
Function[{\[Mu], \[Sigma]},
PDF[NormalDistribution[\[Mu], Sqrt[\[Sigma]]], x]],
{{priorMean, llhMean, postMean}, {priorVar, llhVar, postVar}}];
c = {Red, Green, Blue};
Show[Array[
Plot[f[[#]], {x, 0, 100}, Filling -> {1 -> {Axis, c[[#]]}},
PlotRange -> {Automatic, 0.08}, PlotStyle -> c[[#]]] &, 3]]
![enter image description here]()