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, 13:39

cis's gravatar image

cis
8.2k15167262
Akzeptiert: 70%


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 16 Sep, 19:00

Murmeltier's gravatar image

Murmeltier
1.9k64

bearbeitet 17 Sep, 13:42

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

(17 Sep, 04: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, 06: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, 06: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, 13: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, 13:25) Murmeltier

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, 13:36) cis
1

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

(17 Sep, 13:43) Murmeltier

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, 13: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, 13:56) Murmeltier
Ergebnis 5 von 9 Alle anzeigen
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×261
×69
×8

Frage gestellt: 16 Sep, 13:39

Frage wurde angeschaut: 154 Mal

Zuletzt aktualisiert: 17 Sep, 13:56