Hoffentlich kann ich meine Frage hier im Inhalt klarer beschreiben als im Titel. Es geht vielleicht mehr um Visualisierungsstrategien als um bestimmte pgfplots-Techniken. Das Problem betrifft Regressionen zweidimensionaler Eingaben, aber lassen Sie mich bitte mit eindimensionalen Eingaben beginnen.
Angenommen, ich variiere in meinem Experiment die Eingabe x und beobachte die Ausgabe y. Ich wiederhole die Experimente dreimal. Die Grafik zeigt die Ergebnisse (der Code ist am Ende aufgeführt):
Nehmen wir nun an, mein Experiment habe zwei Eingaben x und y und eine Ausgabe z. Die Beobachtungen aus einem Experiment können folgendermaßen dargestellt werden:
Bei wiederholten Experimenten (sagen wir 4-5 Mal) ist das 3D-Diagramm mit all diesen Ergebnissen jedoch ziemlich verwirrend. Das Mittelwert- und Abweichungsdiagramm sieht besser aus, aber es gehen sicherlich Informationen verloren. Hier ist ein Beispiel, bei dem die Experimente zweimal wiederholt werden (zwei Beobachtungssätze), die Diagramme sehen wie folgt aus:
Gibt es eine Strategie, mit der sich dieser Fall (mehrere xyz) besser visualisieren lässt? „Besser“ vielleicht in dem Sinne, dass jedes einzelne Experiment klar dargestellt wird und auch mehrere Experimente zusammen präsentiert werden, um einen einfacheren Vergleich zu ermöglichen.
Nur als Referenz: Dies ist der pgfplots-Code, der die Diagramme generiert.
Mehrere xyz-Diagramme:
\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}
Einzelnes xyz-Diagramm:
\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}
Mehrere XY-Diagramme:
\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}
Jedoch,
Antwort1
Um dieses Bild zu erhalten...
...versuchen Sie diese Befehle,
pdflatex example.tex; asy -twosided *.asy; pdflatex example.tex
...um dieses Beispiel zu kompilieren.
\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}
Natürlich müssen Sie pdflatex, das Asymptote-Paket und Asymptote auf Ihrem System installiert haben. Mit etwas Glück erhalten Sie auch ein interaktives 3D-Objekt in Ihrem PDF, wenn Sie es mit einer aktuellen Version von Acrobat Reader öffnen.
Selbstverständlich stimme ich mit Jake darin überein, dass es sehr verwirrend ist, selbst wenn Sie dies mit pgfplots tun könnten (was einfach nicht möglich ist).
Antwort2
Eine andere ähnliche Lösung, bei der allerdings nur pgfplots
(nicht ) verwendet wird, besteht darin, die Option den Oberflächen asymptote
hinzuzufügen . Wie folgt:opacity=0.5
\addplot3[surf,mesh/rows=5, opacity=0.5] coordinates { ...
Es ist immer noch nicht perfekt, aber zumindest ist das Bild physisch (die Geisteroberflächen durchdringen sich gegenseitig) und belastet das Gehirn nicht, indem es ein unmögliches 3D-Objekt erzeugt. Beachten Sie, dass der Trick nur bei dem Wert 0,5 funktioniert (d. h. keine Oberfläche bedeckt die andere mehr), da sich die Oberflächen sonst auf eine Weise überlappen, die das Gehirn seltsam findet.
Sie können den gleichen Trick sogar mit den Fehlerbalken (mit opacity
) anwenden, um den folgenden Effekt zu erzielen:
Es folgt der vollständige Code für die letzte Abbildung:
\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}