alt text

Ich bestimme mit
\draw [name intersections={of=g and h, name=S, total=\t}]
die Schnittpunkte zweier Kurven.
Diese sind nun (S-1) und (S-2).

Aber mit \addplot[mark=*, mark size=1.75pt] coordinates{(S-1) (S-2)}; kann ich sie nicht einzeichnen.

Hintergrund: Ich dachte am elegantesten wäre es, die Schnittpunkte, z.B. A(-1.56,2.44), mit nodes near coords oder ähnlich eintragen.

Was könnte ich hier tun?

\documentclass[border=5pt, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\usepackage{amsmath, amssymb}
\usetikzlibrary{intersections}
\begin{document}

\begin{tikzpicture}[font=\footnotesize,
/pgf/number format/NumberStyle/.style={
fixed, 1000 sep={,}, 
%precision=3,
},
]
\begin{axis}[
axis lines = middle,
axis line style = {-latex},
]

\addplot[name path=g, blue, domain=-5:4] {\x+4};
\addplot[name path=h, red, domain=-3.3:3.3] {x^2};

% Geht
\draw [name intersections={of=g and h, name=S, total=\t}] [fill=white]
\foreach \s/\Name/\Anker in {1/A/east, 2/B/west}{(S-\s) circle (2pt) node[anchor=\Anker] {
\pgfplotspointgetcoordinates{(S-\s)}
$\Name (
\pgfmathprintnumber[NumberStyle]{\pgfkeysvalueof{/data point/x}},
\pgfmathprintnumber[NumberStyle]{\pgfkeysvalueof{/data point/y}}
)$ 
}};

% Geht nicht 
%\addplot[mark=*, mark size=1.75pt] coordinates{(S-1) (S-2)};
%\addplot[mark=*, mark size=1.75pt] coordinates{(A) (B)};
\end{axis}
\end{tikzpicture}

\end{document}

gefragt 03 Jul, 21:15

cis's gravatar image

cis
9.3k20201323
Akzeptiert: 62%

bearbeitet 04 Jul, 14:14

Ich verstehe nicht wie dieses \pgfplotspointgetcoordinates funktioniert. Ich tippe auf gar nicht. Das Beispiel

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}
        \node (A) at (axis cs:1,2) {};
        \pgfplotspointgetcoordinates{(A)}
    \end{axis}
\end{tikzpicture}
\end{document}

gibt mir

! Package pgf Error: No shape named A is known.

wat?

(03 Jul, 22:48) Henri

@Henri Laut Doku ist das Makro für die Verwendung innerhalb der Visualisationsphase gedacht. Im Code von cis sorgt es auch tatsächlich dafür, dass die Schnittpunkte mit ihren Koordinaten beschriftet werden.

(04 Jul, 09:25) esdd

Ja, komischer Befehl.

(04 Jul, 10:24) cis
1

@Henri du musst die Ausführung verzögern, z.B. mit \pgfplotsextra{\pgfplotspointgetcoordinates{(A.south)};}, oder indem du in in Stellen verwendest, die automatisch verzögern.

(04 Jul, 10:54) Ulrike Fischer

Ah schade, ich meinte den Befehl \addplot[] coordinates{(S-1) (S-2)};. Ich habe mich da verschrieben.

(04 Jul, 13:21) cis

Zu Deiner Frage besser passendes und übersichtlicheres MWE:

\documentclass[margin=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[xmin=0,xmax=5,ymin=0,ymax=5]
    \path
      (1,1)coordinate(A)
      (4,3)coordinate(B)
    ;
    %\addplot [mark=*,mark size=1.75pt] coordinates {(A) (B)};% funktioniert nicht
   \end{axis}
\end{tikzpicture}
\end{document}

Zitat aus der pgfplots Doku zu \addplot coordinates {<coordinate list>};:

The coordinates can be numbers, but they can also contain mathematical expressions like sin(0.5) or \h*8 (assuming you defined \h somewhere). However, expressions which involve round braces need to be encapsulated in a further set of curly braces, for example ({sin(0.5)},{cos(0.1)}).

Mit anderen Worten: es ist nicht vorgesehen, dass in der Liste der Koordinaten zuvor definierte Punkte mit ihrem Namen auftauchen.

Du kannst aber statt dessen das bereits von TikZ bereit gestellte \draw plot coordinates {<coordinate list>}; verwenden:

\documentclass[margin=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[xmin=0,xmax=5,ymin=0,ymax=5]
    \path
      (1,1)coordinate(A)
      (4,3)coordinate(B)
    ;
    \draw plot [mark=*,mark size=1.75pt] coordinates {(A) (B)};
  \end{axis}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 04 Jul, 09:17

esdd's gravatar image

esdd
15.1k93954

Der Befehl \draw plot [mark=*,mark size=1.75pt] coordinates {(A) (B)};, statt \addplot[] coordinates {(A) (B)}; ist schonmal gut. Lag eigentlich nahe.

Ansonsten hatte ich so ein umständliches Beispiel gewählt, weil ich den Befehl \pgfplotspointgetcoordinates{<...>} verwenden wollte.

(04 Jul, 12:18) cis

Ich schätze mal, meine Methode

% Geht \draw [name intersections={of=g and h, name=S, total=\t}] [fill=white] \foreach \s/\Name/\Anker in {1/A/east, 2/B/west}{(S-\s) circle (2pt) node[anchor=\Anker] { \pgfplotspointgetcoordinates{(S-\s)} $\Name ( \pgfmathprintnumber[NumberStyle]{\pgfkeysvalueof{/data point/x}}, \pgfmathprintnumber[NumberStyle]{\pgfkeysvalueof{/data point/y}} )$ }};

geht dann nicht mehr viel einfacher...

(04 Jul, 13:01) cis

Halte ich für sehr wahrscheinlich, zumal es in der Doku ein analoges Beispiel gibt.

Unabhängig davon sehe ich keinen Sinn darin, warum Du \pgfplotspointgetcoordinates vorführen musst, wenn Du einfach nur wissen willst, warum \addplot [mark=*,mark size=1.75pt] coordinates {(A) (B)}; nicht funktioniert. Das bläht nur Frage und Code auf und macht es anderen Nutzern schwer, den Inhalt zu verstehen.

(05 Jul, 08:15) esdd
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:

×273
×3

Frage gestellt: 03 Jul, 21:15

Frage wurde angeschaut: 195 Mal

Zuletzt aktualisiert: 05 Jul, 08:15