- Questo topic ha 11 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 14 anni, 3 mesi fa da
maumau.
-
CreatoreTopic
-
11 Maggio 2012 alle 16:55 #73613::
ciao a tutti volevo sapere come posso creare l’ effetto di riempimento della gaussiana rappresentato nella foto con pgfplots e togliere anche qui pallini neri che si formano sulla linea del grafico. La color bar posso sincronizzarla con l’ ascissa? questo è il mio codice:`\pgfplotsset{width=15cm,compat=1.3,colormap={new}{color(0cm)=(violet);color(1cm)=(blue);color(2cm)=(cyan);color(3cm)=(green);color(4cm)=(yellow);color(5cm)=(orange);color(6cm)=(red)}}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
%height=9cm,
%width=9cm,
grid=major,
xmajorgrids,
xmin=-0.3,
xmax=0.3,
ymin=0,
ymax=6,
colorbar horizontal, colormap/new]
\addplot gnuplot[id=DoG,surf,shader=interp,samples=50,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))};
%\addplot[mesh,fill,surf,shader=interp,samples=10,domain=0:1]{x^2}\closedcycles;
\addlegendentry{model}
\pgfplotsset{tick style={thin,black},every mark/.append style={solid}}%
\end{axis}
\end{tikzpicture}
\caption{Plot}
\end{figure}`
Attachments:
You must be logged in to view attached files. -
CreatoreTopic
-
AutoreRisposte
-
-
11 Maggio 2012 alle 19:45 #73614::
Allora, per quanto riguarda la colorazione dell’area ti rimando a questa discussione, ti suggerisco di andare per gradi e iniziare prima a modificare la colormap e poi a cambiare la curva (purtroppo non ho il tempo di mettere insieme un EMC).
In questo ti può anche aiutare il pgf manual al capitolo 83.2 (:eek: ).
Puoi mostrare la colormap al di sotto dell’asse x dando la chiave “colormap horizontal” ad axis.
Per eliminare i punti neri il problema mi sembra essere “every mark/.append style={solid}”, se proprio ti serve darla in generale puoi pensare di passare la chiave “no markers” ad axis.Ciao,
Roberto
-
12 Maggio 2012 alle 7:32 #73615::
sono arrivato a questo risultato ! adesso manca solo da modificare il colore della linea che rimane nero e io nn vorrei che si vedesse la linea cioè dovrebbe essere uniforme al resto del grafico..`\pgfplotsset{width=10cm,compat=1.3}
\begin{figure}
\centering
\begin{tikzpicture}
\pgfdeclarehorizontalshading{stefan}{50bp}{
color(0.00000000000000bp)=(violet);
color(8.33333333333333bp)=(blue);
color(16.66666666666670bp)=(cyan);
color(25.00000000000000bp)=(green);
color(33.33333333333330bp)=(yellow);
color(41.66666666666670bp)=(orange);
color(50.00000000000000bp)=(red)
}
\begin{axis}[
%height=9cm,
%width=9cm,
grid=major,
xmajorgrids,
xmin=-0.3,
xmax=0.3,
ymin=0,
ymax=6,
colorbar horizontal,colormap/new,no markers,
colormap={new}{color(0cm)=(violet);color(1cm)=(blue);color(2cm)=(cyan);color(3cm)=(green);color(4cm)=(yellow);color(5cm)=(orange);color(6cm)=(red)}
]
\addplot gnuplot[shading=stefan,color=black,shader=interp,id=DoG,samples=1000,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
%\addplot[shading=stefan,samples=10,domain=0:1]{x^2}\closedcycles;
\addlegendentry{model}
\pgfplotsset{tick style={thin,black},every mark/.append style={solid}}%
\end{axis}
\end{tikzpicture}
\caption{Plot}
\end{figure}`
-
12 Maggio 2012 alle 10:56 #73616::
Puoi risolvere plottando due volte, una prima volta l’area e una seconda volta la linea.
`
\addplot gnuplot[shading=stefan,color=black,shader=interp,id=DoG,samples=1000,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
\addplot+ gnuplot[mesh,point meta=x,id=DoG,samples=1000,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
`
E’ molto più lento in fase di compilazione, ma non sono riuscito a dare il contorno dello stesso colore o a far sparire la linea.Provo adesso ad anticiparti 😉 , e ti dico che se vuoi plottare gli assi al di sopra del grafico puoi fare così
`
\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother
\pgfplotsset{axis line on top/.style={
axis on top=false,
after end axis/.code={
\pgfplotsset{axis line style=opaque,
ticklabel style=opaque,
tick style=opaque,
grid=none}
\pgfplotsdrawaxis}
}
}
`e dare così la chiave “axis line on top” ad axis.
Trucchetto copiato da questa discussione.Ciao,
Roberto
-
13 Maggio 2012 alle 15:29 #73617::
`
\usepackage{pgfplots}
\pgfplotsset{width=10cm}\begin{figure}
\centering
\begin{tikzpicture}
\pgfdeclarehorizontalshading{stefan}{50bp}{
color(0.00000000000000bp)=(violet);
color(8.33333333333333bp)=(blue);
color(16.66666666666670bp)=(cyan);
color(25.00000000000000bp)=(green);
color(33.33333333333330bp)=(yellow);
color(41.66666666666670bp)=(orange);
color(50.00000000000000bp)=(red)
}
\begin{axis}[
%height=9cm,
%width=9cm,
grid=major,
xmajorgrids,
xmin=-0.3,
xmax=0.3,
ymin=0,
ymax=6,
axis on top=true,
%xtick={-0.3,-0.29,…,0.3},
xticklabels={%
$-0.4$,
$-0.3$,
$-0.2$,
$-0.1$,
$\mu$,
$0.1$,
$0.2$,
$0.3$,
$0.4$},
% note: \frac can be done automatically:
% xticklabel style={/pgf/number format/frac},
minor tick num=3,
xlabel=\large$x$,
ylabel=\large$f_{\mu,\sigma^2}(x)$,
colorbar horizontal,colormap/new,no markers,
colormap={new}{color(0cm)=(violet);color(1cm)=(blue);color(2cm)=(cyan);color(3cm)=(green);color(4cm)=(yellow);color(5cm)=(orange);color(6cm)=(red)}]
\addplot gnuplot[shading=stefan,color=black,shader=interp,id=DoG,samples=1000,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
\addplot+ gnuplot[mesh,point meta=x,id=DoG,samples=1000,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
\pgfplotsset{tick style={thin,black},every mark/.append style={solid}}
\end{axis}
\end{tikzpicture}
\caption{Plot}
\end{figure}`sono giunto a questa situazione 😉 è quasi perfetta, vorrei solo aggiungere i numeri sugli assi anche sopra e a destra e colorare di nero anzi che di grigio la linea verticale della griglia passante per la media (mi) ! ma quella roba dell’ axis on top nn lo capita, aggiungendo il tuo codice nn cambiava niente, io ho aggiunto prendendo spunto dal tuo consiglio `axis on top=true` e ha messo gli assi sopra il plot era questo che intendevi?? la linea è andata via ma non del tutto rimane una traccia grigia… sai anche come sostituire i valori della color bar a piacimento? come ho fatto per l’ asse x inserendo la lettera mi ?
-
13 Maggio 2012 alle 16:38 #73618::
Non so se sia possibile aggiungere le etichette su tutti gli assi, puoi provare a dare gli assi separatamente, come suggerito nel capitolo 4.8.10 del manuale, ovviamente utilizzando gli stessi tick per i due assi.Il comando era “axis line on top”, era stato dato apposta per evitare che la griglia si sovrapponesse al grafico. In pratica quando pgfplots disegna gli assi, disegna tutto assieme: assi, tick e griglia. Ergo se dai l’opzione “axis on top” lui disegnerà tutto al di sopra del grafico. Se scrivi
`\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother
\pgfplotsset{axis line on top/.style={
axis on top=false,
after end axis/.code={
\pgfplotsset{axis line style=opaque,
ticklabel style=opaque,
tick style=opaque,
grid=none}
\pgfplotsdrawaxis}
}
}`
dopo \begin{tikzpicture} e prima prima di \begin{axis} e passi ad axis la chiave “axis line on top”, avrai che la griglia verrà disegnata prima, mentre assi e tick verranno disegnati dopo il grafico.Per avere una linea verticale ti basta dare “\addplot+ coordinates {(0,0) — (0,6)};” che darai prima o dopo gli altri addplot a seconda chi vuoi venga disegnato per prima.
Per sostituire i valori della colorbar “point meta min” e “point meta max”, capitolo 4.7 del manuale.
-
13 Maggio 2012 alle 17:56 #73619::
`\begin{figure}
\centering
\begin{tikzpicture}
\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother
\pgfplotsset{axis line on top/.style={
axis on top=false,
after end axis/.code={
\pgfplotsset{axis line style=opaque,
ticklabel style=opaque,
tick style=opaque,
grid=none}
\pgfplotsdrawaxis}
}
}
\pgfdeclarehorizontalshading{stefan}{50bp}{
color(0.00000000000000bp)=(violet);
color(8.33333333333333bp)=(blue);
color(16.66666666666670bp)=(cyan);
color(25.00000000000000bp)=(green);
color(33.33333333333330bp)=(yellow);
color(41.66666666666670bp)=(orange);
color(50.00000000000000bp)=(red)
}
\begin{axis}[
%height=9cm,
%width=9cm,
grid=major,
xmajorgrids,
xmin=-0.3,
xmax=0.3,
ymin=0,
ymax=6,
point meta min={-0.3},
point meta max={0.3},
axis line on top,
%xtick={-0.3,-0.29,…,0.3},
xticklabels={%
$-0.4$,
$-0.3$,
$-0.2$,
$-0.1$,
$\mu$,
$0.1$,
$0.2$,
$0.3$,
$0.4$},
% note: \frac can be done automatically:
% xticklabel style={/pgf/number format/frac},
minor tick num=4,
xlabel=\large$x$,
ylabel=\large$f_{\mu,\sigma^2}(x)$,
colorbar horizontal,colormap/new,no markers,
colormap={new}{color(0cm)=(violet);color(1cm)=(blue);color(2cm)=(cyan);color(3cm)=(green);color(4cm)=(yellow);color(5cm)=(orange);color(6cm)=(red)}]
\addplot gnuplot[shading=stefan,color=black,shader=interp,id=DoG,samples=1000,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
\addplot+ gnuplot[mesh,point meta=x,id=DoG,samples=1000,domain=-0.3:0.3,y domain=0:1]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
\addplot+ [black] coordinates {(0,0)(0,6)};
\pgfplotsset{tick style={thin,black},every mark/.append style={solid}}
\end{axis}
\begin{axis}[
%height=9cm,
%width=9cm,
xmin=-0.3,
xmax=0.3,
ymin=0,
ymax=6,
axis line on top,
axis y line*=right,
axis x line=none
]
\pgfplotsset{tick style={thin,black},every mark/.append style={solid}}
\end{axis}
\begin{axis}[
%height=9cm,
%width=9cm,
xmin=-0.3,
xmax=0.3,
ymin=0,
ymax=6,
axis line on top,
axis x line*=top,
axis y line=none,
xticklabels={%
$-0.4$,
$-0.3$,
$-0.2$,
$-0.1$,
$\mu$,
$0.1$,
$0.2$,
$0.3$,
$0.4$}
]
\pgfplotsset{tick style={thin,black},every mark/.append style={solid}}
\end{axis}
\end{tikzpicture}
\caption{Plot}
\end{figure}`ecco ! haha ho capito, grazie mille, mi hai anticipato davvero quando ho messo axis on top e ho visto la griglia sopra me la sono un pò fatta piacere ! e invece tu mi avevi già dato la soluzione lol gli assi con i valori gli ho messi ma nn sono sicuro che mi piacciano… perchè l’ area del grafico quando compilo solo ogni tanto viene esportata in modo corretto nel pdf da pdflatex mentre la visualizzo sempre correttamente dal visualizzatore dell’ editor ? Con point meta min e max posso scegliere solo il minimo e il massimo giusto?
-
13 Maggio 2012 alle 18:30 #73620
-
13 Maggio 2012 alle 19:57 #73621::
Ho capito.. ho chiesto anche su un altro forum se mi rispondono ti tengo aggiornato..durante la compilazione mi viene sempre fuori questo errore che apparentemente non crea casini:
pgfkeys: I do not know the key ‘/tikz/colormap/new’ and I am going to ignore it. Perhaps you misspelled it. \end{axis}
ho capito che è dovuto alla barra dei colori ma non capisco perchè viene fuori.. secondo te?
-
14 Maggio 2012 alle 2:30 #73622::
Pensavo che avessi dichiarato quella colormap da qualche altra parte, e quindi la commentavo prima di compilare. In pratica la chiave “colormap/new” (capitolo 4.6.6 del manuale) dice a pgfplots di usare una colormap di nome “new”, siccome non è una mappa standard, lui si aspetta che tu l’abbia dichiarata in precedenza; visto che tu non hai dichiarato nessuna mappa “new” pgfplots semplicemente ignora la chiamata, anche se è comunque qualcosa che può dare problemi, quindi togli quella chiave.
-
15 Maggio 2012 alle 17:40 #73623::
`\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{width=10cm}\begin{tikzpicture}
\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother
\pgfplotsset{axis line on top/.style={
axis on top=false,
after end axis/.append code={
\pgfplotsset{axis line style=opaque,
ticklabel style=opaque,
tick style=opaque,
grid=none}
\pgfplotsdrawaxis}
}
}
\pgfdeclarehorizontalshading{stefan}{50bp}{
color(0.00000000000000bp)=(violet);
color(8.33333333333333bp)=(blue);
color(16.66666666666670bp)=(cyan);
color(25.00000000000000bp)=(green);
color(33.33333333333330bp)=(yellow);
color(41.66666666666670bp)=(orange);
color(50.00000000000000bp)=(red)
}
\begin{axis}[
grid=major,
xmin=-0.3, xmax=0.3,
ymin=0, ymax=6,
point meta min={-0.3},
point meta max={0.3},
axis line on top,
tick style={thin,black},
xticklabel style={text height=1.5ex},
xticklabels={%
$-0.4$,
$-0.3$,
$-0.2$,
$-0.1$,
$\mu$,
$0.1$,
$0.2$,
$0.3$,
$0.4$},
extra x ticks={-0.4,-0.3,…,0.4},
extra x tick labels={%
$-0.4$,
$-0.3$,
$-0.2$,
$-0.1$,
$\mu$,
$0.1$,
$0.2$,
$0.3$,
$0.4$},
extra x tick style={
xticklabel pos=right,
xticklabel style={text depth=0pt}
},
extra y ticks={0,…,6},
extra y tick style={
yticklabel pos=right
},
minor tick num=4,
xlabel=\large $x$,
ylabel=\large $f_{\mu,\sigma^2}(x)$,
colorbar horizontal,
colorbar style={
xticklabels={%
$-0.4$,
$-0.3$,
$-0.2$,
$-0.1$,
$\mu$,
$0.1$,
$0.2$,
$0.3$,
$0.4$
},
xticklabel style={text height=1.5ex}
},
no markers,
colormap={new}{color(0cm)=(violet);color(1cm)=(blue);color(2cm)=(cyan);color(3cm)=(green);color(4cm)=(yellow);color(5cm)=(orange);color(6cm)=(red)},
after end axis/.append code={
\draw ({rel axis cs:0,0}-|{axis cs:0,0}) — ({rel axis cs:0,1}-|{axis cs:0,0});
}]
\addplot gnuplot[
shading=stefan,
draw=none,
shader=interp,
id=DoG,
samples=1000,
domain=-0.3:0.3,
y domain=0:1
]{((1/(sqrt(2*pi*0.00570275999999999)))*exp(-(x-0)**2/(2*0.00570275999999999)))}\closedcycle;
\end{axis}
\end{tikzpicture}\end{document}`
guarda ! su un forum mi hanno dato questo.. secondo te i numeri della griglia sono più spessi di quelli della colorbar? a me sembrano come leggermente in grassetto no?
-
15 Maggio 2012 alle 18:46 #73624
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.