Hallo, habe folgende(s) Problem(e) Ich hab ein Diagramm mit 3 Linien bei denen sich 2 an einer Stelle schneiden. Diesen Schnittpunkt möchte ich gerne automatisch finden und beschriften. Dazu soll folgendes Passieren: 1) Punkt einzeichnen optional verwende bislang folgenden Code Code: Open in writeLaTeX
\documentclass{article} \usepackage{pgfplots} \pgfplotsset{ width=1\textwidth, height=0.7\textwidth, every axis legend/.append style={at={(0.1,0.7)},anchor=south west, % Position der Legende in diesem Fall untere linke Ecke bei x=0% und y=100% cells={anchor=west}}, % Position der Beschriftung innerhalt der Legende (east, center, west) title style={at={(0.5,1.05)}} % Position der Überschrift } \begin{document} \begin{tikzpicture} \begin{axis}[ xlabel = Menge\,/\,Tsd. Tonnen, xmin = 0, xmax = 1, ylabel = Kosten\,/\,Mio. Euro, ymin = 0, ymax = 7, title=\textbf{Break Even Point}, ] \addplot coordinates { (0 ,0) (0.250 ,1.179361) (0.500 ,1.218722) (0.750 ,1.258084) (1.000 ,1.297445) }; \addplot coordinates { (0,3.000000) (0.250,4.179361) (0.500,4.218722) (0.750,4.258084) (1.000,4.297445) }; \addplot coordinates { (0 ,0) (0.250 ,1.625041) (0.500 ,3.250082) (0.750 ,4.875123) (1.000 ,6.500165) }; \legend{ Wert1, Wert2, Wert3} \end{axis} \end{tikzpicture} \end{document} hoffe sehr ihr könnt mir helfen. Bin dabei leider bereits ziemlich unter Zeitdruck gefragt 17 Dez '14, 16:19 jens |
Das Finden des Schnittpunktes ist der Antwort von @percusse auf TeX.SX entnommen. Die Linien lassen sich durch den Parameter Open in writeLaTeX
\documentclass{article} \usepackage{pgfplots,tikz} \usetikzlibrary{intersections} \pgfplotsset{ width=1\textwidth, height=0.7\textwidth, every axis legend/.append style={at={(0.1,0.7)},anchor=south west, % Position der Legende in diesem Fall untere linke Ecke bei x=0% und y=100% cells={anchor=west}}, % Position der Beschriftung innerhalt der Legende (east, center, west) title style={at={(0.5,1.05)}} % Position der Überschrift } % Extract coordinates, taken from the answer of precusse % http://tex.stackexchange.com/questions/88386/ \makeatletter \def\markxof#1{ \pgf@process{#1} \pgfmathparse{\pgf@x/\pgfplotsunitxlength +\pgfplots@data@scale@trafo@SHIFT@x)/10^\pgfplots@data@scale@trafo@EXPONENT@x} } \def\markyof#1{ \pgf@process{#1} \pgfmathparse{\pgf@y/\pgfplotsunitylength +\pgfplots@data@scale@trafo@SHIFT@y)/10^\pgfplots@data@scale@trafo@EXPONENT@y} } \makeatother \tikzset{dot/.style={draw,fill,circle,inner sep=1.5pt}} \begin{document} \begin{tikzpicture} \begin{axis}[ xlabel = Menge\,/\,Tsd. Tonnen, xmin = 0, xmax = 1, ylabel = Kosten\,/\,Mio. Euro, ymin = 0, ymax = 7, title=\textbf{Break Even Point}, ] \addplot+[smooth] coordinates { (0 ,0) (0.250 ,1.179361) (0.500 ,1.218722) (0.750 ,1.258084) (1.000 ,1.297445) }; \addplot+[smooth,name path=A] coordinates { (0,3.000000) (0.250,4.179361) (0.500,4.218722) (0.750,4.258084) (1.000,4.297445) }; \addplot+[smooth,name path=B] coordinates { (0 ,0) (0.250 ,1.625041) (0.500 ,3.250082) (0.750 ,4.875123) (1.000 ,6.500165) }; \legend{ Wert1, Wert2, Wert3} \path[name intersections={of=A and B,name=i}] (i-1) \pgfextra{ \markxof{i-1}\xdef\xcoor{\pgfmathresult} \markyof{i-1}\xdef\ycoor{\pgfmathresult} }; \draw[dashed] (axis cs:0,\ycoor) coordinate (ycoor) -- (i-1) -- (axis cs:\xcoor,0) coordinate (xcoor); \node[dot,pin={above left:Break Even Point}] at (i-1) {}; \end{axis} \node[below right,rotate=90] at (xcoor) {\pgfmathprintnumber[fixed,precision=5]\xcoor}; \node[above right] at (ycoor) {\pgfmathprintnumber[fixed,precision=5]\ycoor}; \end{tikzpicture} \end{document} beantwortet 17 Dez '14, 21:34 Henri danke hierfür das ist schonmal Top. Mit "abgerundet" meine ich im Prinzip eine Ausgleichskurve über die Punkte. Wie bei Excel in einem XY-Diagramm mit interpolierten Linien. Dort werden die Punkte auch über eine Kurve verbunden. Denn der Verlauf meiner Daten hat in wirklichkeit ja auch keinen Knick, sondern verläuft vor derm zweiten Punkt wohl etwas steiler und macht dann eine kurve zu den anderen Punkten hin. (hoffe so ist es verständlicher)
(17 Dez '14, 23:24)
jens
Ich glaube hier ist einfach
(18 Dez '14, 08:57)
Johannes
ok muss ich dann die Koordinaten mit Punkten ohne linie einlesen und dann die linie drüber oder kann ich das dirket in einem zug machen???
(18 Dez '14, 12:11)
jens
@jens Willkommen auf der TeXwelt! Kommentare und Rückfragen bitte als "Kommentar" posten, nicht als "Antwort" (ich habe die Antwort in einen Kommentar umgewandelt). Da sind hier echte Antworten im Sinne von Lösungen. Das verbessert die Übersicht und Sortierbarkeit. Der Aufbau hier ist anders (innovativer ;-)) als in klassischen Webforen, dauert sicher einen Moment zum Gewöhnen.
(18 Dez '14, 12:42)
stefan ♦♦
ok verstanden das Problem mit der "abgerundeten" Linie/Kurve hat sich übrigens erledigt, da ich meine Daten nochmal überarbeitet habe. Trotzdem wäre ich um die Antwort für die Zukunft dankbar
(18 Dez '14, 13:20)
jens
@jens Du kannst das gern als eigenständige Frage posten. Das macht die Frage sichtbarer, hier geht es als Teilfrage evtl. unter. Ist auch gern gesehen hier, wir bearbeiten Fragen gern einzeln, da besser einsortierbar nach Themen als Sammelfragen, nur als Info.
(18 Dez '14, 13:57)
stefan ♦♦
Hallo nochmal, eine kurze Frage ist noch aufgetaucht: Die Daten haben sich ein wenig geändert und die Linien sind verschoben. Nun ist der x-Wert des Schnittpunktes zu nahe an der 3.Linie. Wie kann ich den angegebenen Wert (im Beispiel hier 0,65268) ewas nach oben verschieben??
(03 Feb '15, 11:54)
jens
Ergebnis 5 von 7
show 2 more comments
|