Seite 1 von 1

tikz pgfplots - 2 addplot3-Befehle ineinander zeichnen

Verfasst: Mi 25. Mai 2016, 19:48
von TobiBader
Hallo golatex-Team,
ich bin noch neu in latex und arbeite mit pgfplots in 3D.
Aus einer FEM-Berechnung habe ich eine Ausgangsdatei, welche aus dreieckigen Elementen mit Knotenwerten besteht. Von diesen Dreiecken stelle ich lediglich die Flächen mit der shader=interp dar, aber nicht die Kanten. (das alleine funktioniert :D )
Außerdem habe ich eine Datei mit den Linien der gesamten Außenkonturen, von welchen ich in einem separaten addplot3-Befehl lediglich die sichtbaren Außenkonturen dargestellt haben möchte.

Gibt es eine Möglichkeit (evtl. in der axis-Umgebung) pgfplots mitzuteilen, dass er die beiden addplot3-befehle nicht übereinander zeichnen soll, sondern ineinander ?

Das erwartete Ergebnis wäre dann folgendes:
Er zeichnet deckend die sichtbare, interpolierte Oberfläche des Körpers. Die nicht sichtbaren Kanten aus der Kontur-Datei werden nicht dargestellt, da sie von der Oberfläche verdeckt werden. Die sichtbaren Kanten der Kontur-Datei werden dargestellt, da sie sich genau auf der Verbindung zweier Oberflächen-Elemente befinden.

Als Minimalbeispiel habe ich eine Kontur.tex datei angehängt, bei welcher sich im addplot3-Aufruf die Beispielliste der Kontur-Linien befindet, und eine Flaeche.tex, bei welcher sich im addplot3 die zugehörige Liste der Knotenfarbwerte für die Flächeninterpolation befindet. Die beiden separaten Ergebnisse habe ich in einen Screenshot gepackt - kann man beide Ergebnisse ineinander packen?

Oder kann ich vielleicht die beiden separaten Listen mit ihren individuellen Einstellungen (shader/surf/line whith...) in einem einzigen addplot3-Befehl aufrufen?

Wenn ihr mir helfen könntet wäre ich wirklich sehr dankbar,
Beste Grüße
Tobi

Verfasst: Mi 25. Mai 2016, 21:07
von Bartman
Ich möchte die folgende Umgestaltung der von Dir veröffentlichten Informationen vorschlagen:

Kontur.tex
\documentclass[12pt]{article}
\usepackage{pgfplots}


\begin{document}

%
%\begin{figure}[!ht]
\begin{tikzpicture}
\begin{axis}[view/h=120,xlabel=$x$,ylabel=$y$]

\addplot3[
opacity=1,
table/row sep=\\,
patch,
patch type=line,
line width=3pt,
color=black,
% vertex count=5,
% patch table with point meta={%
patch table={%
% pt1 pt2 pt3 pt4 pt5 cdata
0 1 \\
1 6 \\
6 5 \\
5 4 \\
4 3 \\
3 2 \\
2 0 \\
0 8 \\
8 6 \\
8 3 \\
1 7 \\
7 4 \\
7 2 \\
}]
table []{
x y z c\\
0 2 0 0 \\%0
2 2 0 0 \\%1
0 1 3 3 \\%2
0 0 3 3 \\%3
1 0 3 3 \\%4
2 0 2 2 \\%5
2 0 0 0 \\%6
1 1 3 10 \\%7
0 0 0 10 \\%8
1 0 3 0 \\%9=4 copy
1 1 2 0 \\%10=7 copy
};

% replicate the vertex list to show \coordindex: 
\addplot3[only marks,nodes near coords=\coordindex]
table[row sep=\\] {
0 2 0\\ 2 2 0\\ 0 1 3\\ 0 0 3\\
1 0 3\\ 2 0 2\\ 2 0 0\\ 1 1 2\\ 0 0 0\\
};

\end{axis}
\end{tikzpicture}
%\end{figure}

\end{document}
Flaeche.tex
\documentclass[12pt]{article}
\usepackage{pgfplots}


\begin{document}

%
%\begin{figure}[!ht]
\begin{tikzpicture}
\begin{axis}[view/h=120,xlabel=$x$,ylabel=$y$]

\addplot3[
opacity=1,
table/row sep=\\,
patch,
% patch type=polygon,
shader=interp,
% line width=1pt,
% vertex count=5,
% patch table with point meta={%
patch table={%
% pt1 pt2 pt3 pt4 pt5 cdata
0 1 7 \\
1 6 5 \\
1 5 4 \\
1 4 7 \\
7 4 2 \\
2 4 3 \\
0 7 2 \\
0 8 1 \\
1 8 6 \\
6 8 5 \\
5 8 4 \\
4 8 3 \\
3 8 2 \\
2 8 0 \\
}]
table [point meta=\thisrow{c}]{
x y z c \\
0 2 0 0 \\%0
2 2 0 0 \\%1
0 1 3 3 \\%2
0 0 3 3 \\%3
1 0 3 3 \\%4
2 0 2 2 \\%5
2 0 0 0 \\%6
1 1 3 10 \\%7
0 0 0 10 \\%8
1 0 3 0 \\%9=4 copy
1 1 2 0 \\%10=7 copy
};

% replicate the vertex list to show \coordindex: 
\addplot3[only marks,nodes near coords=\coordindex]
table[row sep=\\] {
0 2 0\\ 2 2 0\\ 0 1 3\\ 0 0 3\\
1 0 3\\ 2 0 2\\ 2 0 0\\ 1 1 2\\ 0 0 0\\
};

\end{axis}
\end{tikzpicture}
%\end{figure}

\end{document}
Bild

Kann keiner helfen?

Verfasst: Fr 3. Jun 2016, 14:13
von TobiBader
Erstmal Danke für das Umgestalten, so ist es besser :)
Aber habt ihr eine Lösung für mein Problem oder vielleicht einen Tipp? Für Hilfe wäre ich wirklich sehr dankbar :)