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 04 Jul '19, 03:15

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 04 Jul '19, 20: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?

(04 Jul '19, 04: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 '19, 15:25) esdd

Ja, komischer Befehl.

(04 Jul '19, 16: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 '19, 16:54) Ulrike Fischer

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

(04 Jul '19, 19: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 '19, 15:17

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

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 '19, 18: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 '19, 19: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 '19, 14:15) esdd
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
×3

gestellte Frage: 04 Jul '19, 03:15

Frage wurde gesehen: 6,606 Mal

zuletzt geändert: 05 Jul '19, 14:15