2011-12-19 3 views
11

Posso specificare diversi colori di riempimento all'interno di un singolo grafico come il muggito o avrei bisogno di "Mostra" diversi grafici? Diciamo che vorrei che lo stile di riempimento fosse lo stesso di PlotStyle.Stili di riempimento utilizzando un singolo grafico in Mathematica

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

Non 'FillingStyle' fare quello che vuoi? – Verbeia

+0

500 Sono curioso: pensavo che avresti gradito la mia risposta, ma nessun commento. Non funziona per la tua applicazione? –

+0

@Mr. È ! Ho avuto quella scadenza che mi ha impedito di approfondire ancora. Ma in realtà stavo pensando che questo insieme ad altri 2 della tua soluzione per quanto riguarda la grafica rappresentano una buona filosofia di impostazione delle cose "nella roccia" Ho solo bisogno di farti domande su di esso! Ma mi piace! – 500

risposta

13

Avrete bisogno di usare FillingStyle per riempire. Credo che si è rimasti bloccati nella sintassi per FillingStyle , che è non lo stesso di quello per PlotStyle, anche se ti aspetteresti che lo fosse. Dovrete assegnare un colore per ogni curva come FillingStyle -> {1 -> color1, 2 -> color2}, ecc Ecco un esempio:

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

Si potrebbe fare qualcosa di simile

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

Questo ottiene un risultato:

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}] 

consultare la guida sotto FillingStyle , Portata, stile di riempimento.

E in alternativa:

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

propongo fare una proroga per la definizione di 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" 

Con questo in luogo, è possibile utilizzare FillingStyle -> "Match" per l'auto-style i riempimenti per abbinare gli stili principali.

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

Mi piace questo approccio. – abcd

+0

@yoda, grazie –