2011-12-19 4 views
11

Могу ли я указать разные цвета наполнения в пределах одного участка, например, ниже, или мне нужно «показать» несколько участков? Скажем, я бы хотел, чтобы стиль заполнения был таким же, как PlotStyle.Стили заполнения с использованием одного участка в Mathematica

priorMean = 50; 
priorVar = 100; 

llhMean = 30; 
llhVar = 40; 

postMean=35.71; 
postVar=28.57; 


Plot[ 
    [email protected]Thread[ 
    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' делать то, что вы хотите? – Verbeia

+0

500 Мне любопытно: я думал, что вам понравится мой ответ, но без комментариев. Не работает ли ваше приложение? –

+0

@Mr. Это ! У меня был тот крайний срок, который меня отключил, чтобы копаться в нем. Но я действительно думал, что это вместе с двумя другими из вашего решения в отношении Графика представляет собой хорошую философию настройки вещей «в скале», мне просто нужно задать вам вопросы об этом! Но мне это нравится! – 500

ответ

13

Вы должны будете использовать 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

8

Вы могли бы сделать что-то вроде

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

3

Это получает результат:

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 , Область применения, Стиль заполнения.

И в качестве альтернативы:

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

9

Я предлагаю сделать пристройку к определению Plot. I have done this before.

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

+1

Мне нравится этот подход. – abcd

+0

@ йида, спасибо –

Смежные вопросы