Espero poder describir mi pregunta más claramente aquí en el contenido que en el título. Podría tratarse más de una estrategia de visualización que de técnicas específicas de pgfplots. El problema tiene que ver con las regresiones de entradas bidimensionales, pero permítanme comenzar con entradas unidimensionales.
Digamos que en mi experimento varío la entrada x y observo la salida y. Repito los experimentos tres veces. El gráfico muestra los resultados (el código se enumera al final):
Ahora supongamos que mi experimento tiene dos entradas xey, y una salida z. Para las observaciones de un experimento, se puede trazar así:
Sin embargo, para experimentos repetidos (digamos 4 o 5 veces), el gráfico tridimensional que contiene todos estos resultados es bastante confuso. El gráfico de media y desviación se ve mejor, pero ciertamente pierde información. A continuación se muestra un ejemplo, cuando los experimentos se repiten dos veces (dos conjuntos de observaciones), los gráficos serán:
¿Existe alguna estrategia que pueda visualizar mejor este caso (múltiples xyz)? "Mejor" tal vez en el sentido de que cada experimento individual se presenta claramente y también se presentan varios experimentos juntos para facilitar la comparación.
Solo como referencia, estos son el código pgfplots que genera los gráficos.
Gráfico xyz múltiple:
\begin{tikzpicture}[scale=0.8]
\begin{axis}
[scale only axis, width=0.35\textwidth,
xlabel=x, ylabel=y, zlabel=z, title=Two dimensional input,]
\addplot3[surf,mesh/rows=5] coordinates {
(0,0,0) (1,0,0) (2,0,0) (3,0,0)
(0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4)
(0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5)
(0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45)
(0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65)
};
\addplot3[surf,mesh/rows=5] coordinates {
(0,0,0.1) (1,0,0.1) (2,0,0) (3,0,0)
(0,1,0.3) (1,1,0.2) (2,1,0.2) (3,1,0.4)
(0,2,0.15) (1,2,0.6) (2,2,0.5) (3,2,0.5)
(0,3,0.55) (1,3,0.7) (2,3,0.65) (3,3,0.45)
(0,4,0.6) (1,4,0.85) (2,4,0.65) (3,4,0.35)
};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}[scale=0.8]
\begin{axis}[scale only axis, width=0.3\textwidth,
xlabel=x, ylabel=y, zlabel=z, title=Mean and Deviation,]
\addplot3[surf,mesh/rows=5,
error bars/z dir=both, error bars/z fixed=0.1,] coordinates {
(0,0,0.05) (1,0,0.05) (2,0,0) (3,0,0)
(0,1,0.2) (1,1,0.25) (2,1,0.25) (3,1,0.4)
(0,2,0.15) (1,2,0.55) (2,2,0.5) (3,2,0.5)
(0,3,0.65) (1,3,0.65) (2,3,0.65) (3,3,0.45)
(0,4,0.7) (1,4,0.80) (2,4,0.75) (3,4,0.5)
};
\end{axis}
\end{tikzpicture}
Gráfico xyz único:
\begin{tikzpicture}[scale=0.8]
\begin{axis}
[scale only axis, width=0.35\textwidth,
xlabel=x, ylabel=y, zlabel=z, title=Two dimensional input,]
\addplot3[surf,mesh/rows=5] coordinates {
(0,0,0) (1,0,0) (2,0,0) (3,0,0)
(0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4)
(0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5)
(0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45)
(0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65)
};
\end{axis}
\end{tikzpicture}
\hfill
\begin{tikzpicture}[scale=0.8]
\begin{axis}[view={0}{90}, scale only axis, width=0.3\textwidth,
xlabel=x, ylabel=y, zlabel=z, title=Top view of two dimensional input, ]
\addplot3[surf,mesh/rows=5] coordinates {
(0,0,0) (1,0,0) (2,0,0) (3,0,0)
(0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4)
(0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5)
(0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45)
(0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65)
};
\end{axis}
\end{tikzpicture}
Gráfico xy múltiple:
\begin{tikzpicture}
\begin{axis}
[scale only axis, width=0.3\textwidth,
xlabel=x, ylabel=y, title=One dimensional input]
\addplot coordinates{(0, 0.6) (0.1, 0.25) (0.2, 0.1) (0.3, 0.06) (0.4, 0.02) (0.5, 0.01)};
\addplot coordinates{(0, 0.7) (0.1, 0.1) (0.2, 0.125) (0.3, 0.08) (0.4, 0.016) (0.5, 0.02)};
\addplot coordinates{(0, 0.5) (0.1, 0.15) (0.2, 0.15) (0.3, 0.10) (0.4, 0.012) (0.5, 0.03)};
\legend{exp1, exp2, exp3}
\end{axis}
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\begin{axis}
[scale only axis, width=0.3\textwidth,
xlabel=x, ylabel=y, title=Mean and Deviation]
\addplot[ error bars/.cd, y dir=both, y explicit, ]
coordinates{(0, 0.6) +- (0, 0.1)
(0.1, 0.1) +- (0, 0.1)
(0.2, 0.125) +- (0, 0.025)
(0.3, 0.08) +- (0, 0.08)
(0.4, 0.016) +- (0, 0.04)
(0.5, 0.02) +- (0, 0.02)};
\end{axis}
\end{tikzpicture}
Sin embargo,
Respuesta1
Para obtener esta imagen...
...prueba estos comandos,
pdflatex example.tex; asy -twosided *.asy; pdflatex example.tex
...para compilar este ejemplo.
\documentclass[]{article}
\usepackage[]{asymptote}
\begin{document}
Two Dimensional Input
\vspace{3cm}
\begin{asy}
settings.render=4;
import three;
import graph3;
currentlight=White;
currentprojection=orthographic(3,-5,1,center=true);
size(5cm);
size3(5cm,5cm,5cm, IgnoreAspect);
render render=render(compression=Low,merge=true);
triple[][] t1 =
{
{(0,0,0), (1,0,0), (2,0,0), (3,0,0) },
{(0,1,0.1), (1,1,0.3), (2,1,0.3), (3,1,0.4)},
{(0,2,0.15), (1,2,0.5), (2,2,0.5), (3,2,0.5)},
{(0,3,0.65), (1,3,0.60), (2,3,0.65), (3,3,0.45)},
{(0,4,0.8), (1,4,0.75), (2,4,0.85), (3,4,0.65)}
};
triple[][] t2 =
{
{(0,0,0.1), (1,0,0.1), (2,0,0), (3,0,0)},
{(0,1,0.3), (1,1,0.2), (2,1,0.2), (3,1,0.4)},
{(0,2,0.15), (1,2,0.6), (2,2,0.5), (3,2,0.5)},
{(0,3,0.55), (1,3,0.7), (2,3,0.65), (3,3,0.45)},
{(0,4,0.6),(1,4,0.85),(2,4,0.65),(3,4,0.35)}
};
draw(surface(t1), blue+opacity(0.9));
draw(surface(t2), red+opacity(0.6));
xaxis3("$x$",Bounds,InTicks);
yaxis3("$y$",Bounds,InTicks);
zaxis3("$z$",Bounds,InTicks);
\end{asy}
\end{document}
Obviamente necesita tener pdflatex, el paquete asíntota y la asíntota instalados en su sistema. Con un poco de suerte, también obtendrás un objeto 3D interactivo en tu PDF si lo abres con una versión reciente de Acrobat Reader.
No hace falta que hoy esté de acuerdo con Jake en que incluso si pudieras hacer esto con pgfplots (que no puedes simplemente) es muy confuso.
Respuesta2
Otra solución similar pero usando puramente pgfplots
(no asymptote
), es agregar la opacity=0.5
opción a las superficies. Como esto:
\addplot3[surf,mesh/rows=5, opacity=0.5] coordinates { ...
Todavía no es perfecta, pero al menos la imagen es física (las superficies fantasma se interpenetran) y no daña el cerebro al crear un objeto 3D imposible. Tenga en cuenta que el truco solo funciona para el valor 0,5 (es decir, ninguna superficie cubre más a la otra); de lo contrario, las superficies comienzan a superponerse de una manera que el cerebro encuentra extraña.
Incluso puedes hacer el mismo truco con las barras de error (con opacity
) para obtener el siguiente efecto:
Lo que sigue es el código completo de la última figura:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[scale=0.8]
\begin{axis}
[scale only axis, width=0.35\textwidth,
xlabel=x, ylabel=y, zlabel=z, title=Two dimensional input,]
\addplot3[surf,mesh/rows=5,opacity=0.5] coordinates {
(0,0,0) (1,0,0) (2,0,0) (3,0,0)
(0,1,0.1) (1,1,0.3) (2,1,0.3) (3,1,0.4)
(0,2,0.15) (1,2,0.5) (2,2,0.5) (3,2,0.5)
(0,3,0.65) (1,3,0.60) (2,3,0.65) (3,3,0.45)
(0,4,0.8) (1,4,0.75) (2,4,0.85) (3,4,0.65)
};
\addplot3[surf,mesh/rows=5, opacity=0.5] coordinates {
(0,0,0.1) (1,0,0.1) (2,0,0) (3,0,0)
(0,1,0.3) (1,1,0.2) (2,1,0.2) (3,1,0.4)
(0,2,0.15) (1,2,0.6) (2,2,0.5) (3,2,0.5)
(0,3,0.55) (1,3,0.7) (2,3,0.65) (3,3,0.45)
(0,4,0.6) (1,4,0.85) (2,4,0.65) (3,4,0.35)
};
\addplot3[mesh/rows=5,
error bars/z dir=both, error bars/z fixed=0.1, opacity=0.3, draw=none] coordinates {
(0,0,0.05) (1,0,0.05) (2,0,0) (3,0,0)
(0,1,0.2) (1,1,0.25) (2,1,0.25) (3,1,0.4)
(0,2,0.15) (1,2,0.55) (2,2,0.5) (3,2,0.5)
(0,3,0.65) (1,3,0.65) (2,3,0.65) (3,3,0.45)
(0,4,0.7) (1,4,0.80) (2,4,0.75) (3,4,0.5)
};
\end{axis}
\end{tikzpicture}
\end{document}