Стили заполнения с использованием одного участка в 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