alt text

Für eine Koordinatentabelle mit 4 Punkten gebe ich folgende Verbindungen an

Öffne in Overleaf
patch table with point meta={
Startpkt Endpkt colordata  \\
0 0 \\
1 1 \\
2 2 \\
3 3  \\% Bis hierhin ok....
0 3 \\% Ab hier wird überschrieben
0 2  \\
},

Gehen dabei von einem Punkt mehrere Kanten aus, wird mehrmals eine "Punktnummer" gesetzt durch

Öffne in Overleaf
visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords={\punktnummer}

Mit Hilfe dieses Miniprogrammes kann ich mehrfache Elemente aus Liste ausschließen. Aber ich weiß nicht wie ich das bei nodes near coords reinbastle. BTW: Falls jmd. ein solches Listenprüfprogramm mit pgfmath (\pgfmathsetmacro{*}{x ? y : z}), also ohne ifx usw., umzusetzen weiß wäre das natürlich gut.

alt text

Öffne in Overleaf
\documentclass[margin=5mm]{standalone}
\usepackage{tikz, pgffor, amsmath, amssymb}
\begin{document}

\foreach \t in {1,2,3,...,10}{% natürliche Zahlenfolge
% \pgfmathsetmacro{\u}{0}
\foreach \x in {1,2,2,3,4,5,7}{% zu testende Zahlen
    \ifx \x\t% 
    \global\let\u=\t%
    \fi%
}%
\ifx \u\t%
{\t~}%
\else{}% Leer
\fi%
}
\end{document}


Minimalbeispiel:

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis]
\addplot+[
table/row sep=newline, 
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={
Startpkt Endpkt colordata  \\
0 0 \\
1 1 \\
2 2 \\
3 3  \\% Bis hierhin ok....
0 3 \\% Ab hier wird überschrieben
0 2  \\
},
%
% Beschriftung
visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords={\punktnummer}
]
% Koordinatentabelle
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\ 
1 1 0             \\
2 0 1              \\
3 1 1              \\
};
\end{axis}
\end{tikzpicture}

\end{document}

gefragt 16 Sep '18, 19:39

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%


Es gibt da vermutlich viele Möglichkeiten, die einfachste ist vermutlich, dass Du die Punkte in einer separaten Tabelle labelst. Aber weil Du das vermutlich schon weisst und nicht magst, hier kommt eine andere Möglichkeit, die die Duplikate einfach ausblendet. Wer weiss, vielleicht ist das am Ende sogar noch für irgendwas gut. ;-)

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}
\xdef\LstPN{-1}
\newif\ifDupe
\pgfplotsset{avoid dupes/.code={\Dupefalse
\foreach \X in \LstPN
{\pgfmathtruncatemacro{\itest}{ifthenelse(\X==\punktnummer,1,0)}
\ifnum\itest=1
\global\Dupetrue
\breakforeach
\fi}
\ifDupe
\typeout{\punktnummer\space ist\space ein\space Duplikat!}
\pgfkeysalso{/tikz/opacity=0} %macht die Nummer einfach unsichtbar
\else
\xdef\LstPN{\LstPN,\punktnummer}
\fi}}
\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis]
\addplot+[
table/row sep=newline, 
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={
Startpkt Endpkt colordata  \\
0 0 \\
1 1 \\
2 2 \\
3 3  \\% Bis hierhin ok....
0 3 \\% Ab hier wird überschrieben
0 2  \\
},
%
% Beschriftung
visualization depends on={value \thisrowno{0} \as \punktnummer},
every node near coord/.append style={
            /pgfplots/avoid dupes
        },
nodes near coords={\punktnummer}
]
% Koordinatentabelle
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\ 
1 1 0             \\
2 0 1              \\
3 1 1              \\
};
\end{axis}
\end{tikzpicture}
\end{document}

alt text

Du kannst die redundanten Punktnummern auch einfach killen.

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}
\xdef\LstPN{-1}
\newif\ifDupe
\pgfplotsset{avoid dupes/.code={\Dupefalse
\foreach \X in \LstPN
{\pgfmathtruncatemacro{\itest}{ifthenelse(\X==\punktnummer,1,0)}
\ifnum\itest=1
\global\Dupetrue
\breakforeach
\fi}
\ifDupe
\typeout{\punktnummer\space ist\space ein\space Duplikat!}
\xdef\punktnummer{} %macht die Nummer einfach unsichtbar
\else
\xdef\LstPN{\LstPN,\punktnummer}
\fi}}
\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis]
\addplot+[
table/row sep=newline, 
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={
Startpkt Endpkt colordata  \\
0 0 \\
1 1 \\
2 2 \\
3 3  \\% Bis hierhin ok....
0 3 \\% Ab hier wird überschrieben
0 2  \\
},
%
% Beschriftung
visualization depends on={value \thisrowno{0} \as \punktnummer},
every node near coord/.append style={
            /pgfplots/avoid dupes
        },
nodes near coords={\punktnummer}
]
% Koordinatentabelle
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\ 
1 1 0             \\
2 0 1              \\
3 1 1              \\
};
\end{axis}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 17 Sep '18, 01:00

Community's gravatar image

Community
21
Akzeptiert-Rate: 56%

bearbeitet 17 Sep '18, 19:42

Gel%C3%B6scht's gravatar image

Gelöscht
(ausgesetzt)

Ach Du lieber Himmel. :() Jetzt, erstmal alles verstehen... ;)

(17 Sep '18, 10:03) cis

Ja, nicht schlecht. Ich bin mir aber ziemlich sicher, dass es auch einfacher / elementarer geht, d.h. nicht geschummelt als style, sondern als echte Platzierungsregel. Normalerweise kann man schon in den labels rumrechnen (ich finde gerade nur das andeutende Bsp. https://texwelt.de/wissen/fragen/22087/pgfplots-trigonometrische-kurve-wie-kann-ich-die-x-achse-mit-beliebigen-pi-faktoren-automatisch-skalieren ). opacity kann auch tückisch sein; etwa bei Hintergründen oder in Voransichten funkt. das gerne nicht.

(17 Sep '18, 12:19) cis

Bloß sind irgendwie meine Schleifen mistig.

nodes near coords={% \foreach \t in {1,2,3,...,10}{%%% natürliche Zahlenfolge \pgfmathsetmacro{\u}{0}% \foreach \x in {\punktnummer}{% zu testende Zahlen \ifx \x\t\breakforeach% \global\let\u=\t% \fi% }% \ifx \u\t% {\t a}% \else{\t b}% SOLL Leer bleiben !! \breakforeach \fi% }%%% }

(17 Sep '18, 12:19) cis

Also ich verstehe das nicht. Das liefert mir "Punktnummer Stück" den Buchstaben a. Das müsste doch jetzt möglich sein, nur die "Stückzahl anzuzeigen"...

nodes near coords={% \foreach[] \t in {\punktnummer}{% \foreach \x in{0,1,2,3,4}{% \pgfmathtruncatemacro{\itest}{ifthenelse(\x==\punktnummer,1,0)}% \ifnum\itest=1% \global\let\u=\punktnummer% %\else{} \fi \ifx \u\punktnummer% {}% \else% {a}% liefert mir "Punktnummer Stück" den Buchstaben a ???!!! \fi% }}}

(17 Sep '18, 19:04) cis

@cis Wie gesagt, das einfachste ist, die Nummern einfach mit einem separaten Plot zu platzieren. Und ich sehe nicht, wie \pgfkeysalso{opacity=0} tückisch sein kann.

(17 Sep '18, 19:25) Community

Separater plot verdoppelt grob den Code-Umfang, da zweimal die gleiche Tabelle benötigt wird (schlimm bei Tabellen mit tausend Einträgen). Ach Mann, das muss doch irgendwie gehen, mit der Schleifenmethode - bin nur zu blöd zum Programmieren...

(17 Sep '18, 19:36) cis
1

@cis Ich habe eine zweite Variante eingebaut, in der ich die Punktnummer einfach kille.

(17 Sep '18, 19:43) Community

Killen, das entspricht schon eher ganz meinem Gusto. Ich denke, diese Methode werde ich dann verwenden (wobei mir schon das nächste Problem klar ist: die Textpositionierung south, north,... mit der hier auch mehrfach rumgeritten wird - mal schauen). Mmmhhh, also mich hätte die "Schleifenmethode" interessiert, rein Interessehalber.... naja....

(17 Sep '18, 19:52) cis
1

@cis Aber ich mache doch auch eine Schleife. In Deinem Vorschlag ist halt leider {1,2,3,4} hard codiert, wohingegen in dem obigen Code sukzessive eine Liste aufgebaut wird, in der die bekannten/alten Punktummern gespeihert werden, und dann wird gecheckt, ob eine Nummer schon da war.

(17 Sep '18, 19:56) Community
Ergebnis 5 von 9 show 4 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×298
×76
×8

gestellte Frage: 16 Sep '18, 19:39

Frage wurde gesehen: 5,136 Mal

zuletzt geändert: 17 Sep '18, 19:56