Seite 1 von 2

pgfplots: diagramm mit tikzpicture -- Konfiguration

Verfasst: Mi 22. Dez 2010, 13:27
von ChrisPZV
Moin allerseits,

ich bin durch irgendeinen Zufall auf das Paket "pgfplots" gestoßen, als ich mich nach einer Möglichkeit für das Zeichnen von Diagrammen umgesehen habe. Nun scheitere ich allerdings am "Finetuning":
  • An den Punkten soll die Beschriftung stehen (L|R|O).
  • Der Achsenschnittpunkt soll bei $ x_{0}=0,y_{0}=335 $ sein (Beschriftung y-Achse von 335 - 435).
Den Punkt S könnte ich weglassen, idealerweise ist die y-Achse aber unterbrochen, damit nicht soviel Platz verschwendet wird. Die Maßstäbe der Achse müssen identisch sein, das Diagramm soll also nicht verzerrt werden.

Bitte gebt mir mal ein paar Stichworte, damit ich an der Stelle voran komme.

thx!
\documentclass[10pt, a4paper]{article}            % 10pt schriftgröße, DIN A4, Artikel
\usepackage[a4paper,left=2.5cm,right=2cm,top=2.5cm,bottom=2.5cm]{geometry}
\linespread{1.5}                            % Zeilenabstand 1,5
\usepackage{setspace}                        % \singlesspacing | \onehalfspacing
\usepackage[ngerman]{babel}                     % deutsche rechtschreibprüfung/silbentrennung
\usepackage[ansinew]{inputenc}                     % utf8 codierte .tex dateien
\usepackage[T1]{fontenc}                     % korrekte umlaute im ausgabedokument
\usepackage[style=numeric-comp,hyperref]{biblatex}   % Literaturverzeichnis-Style
\usepackage{blindtext}

\usepackage{pgfplots}								% Koordinatenplot

\begin{document}
\section{Das Diagramm}
Hier folgt ein Diagramm:
\begin{figure*}[h]
	\centering
	\begin{tikzpicture}
		\begin{axis}[
			xlabel=$x~in~cm$,
			ylabel=$y~in~cm$,
			xmin=-50,
			xmax=+50,
			ymin=0,
			ymax=100,
			enlargelimits=0.1, % ein bi"{s}chen Rand hinter dem "{a}u"{s}ersten Punkt
			]
			\addplot+[only marks,mark=x] 
			coordinates {
				(3,27) [(L)]
				(-10,36) [(L)]
				
				(-7,11) [(R)]
				(5,74) [(R)]
				
				(3,80) [(O)]
				(16,97) [(O)]
				
				(0,-335) [(S)]
			};
		\end{axis}
	\end{tikzpicture}
	\caption{ein Diagramm}
\end{figure*}


Nun m\"{o}chte ich das Diagramm gerne wie folgt manipulieren:
\begin{itemize}
	\item Der Achsenschnittpunkt soll bei $ x_{0}=0,y_{0}=335 $ sein (Beschriftung y-Achse von 335 - 435).
	\item An den Punkten soll die Beschriftung stehen (L|R|O).
\end{itemize}
\end{document}

Verfasst: Mi 22. Dez 2010, 14:48
von bloodworks
Moin in erster Näherung könntest du so was versuchen:
\documentclass{article}            %
                 

\usepackage[latin1]{inputenc}                     % latin1 bitteschön



\usepackage{pgfplots}                        % Koordinatenplot

\begin{document}
\section{Das Diagramm}
Hier folgt ein Diagramm:
\begin{figure*}[h]
   \centering
   \begin{tikzpicture}
      \begin{axis}[nodes near coords,nodes near coords align={auto},
   axis y line =center,
      axis x line=top,
      ytick={335,435},
         xlabel=$x~in~cm$,
         ylabel=$y~in~cm$,
         xmin=-50,
         xmax=+50,
         ymin=-336,
         ymax=435,
         enlargelimits=0.1, 
         ]
         \addplot+[only marks,mark=x,point meta=explicit symbolic ]
         coordinates {
            (3,27) [(L)]
            (-10,36) [(L)]
           
            (-7,11) [(R)]
            (5,74) [(R)]
           
            (3,80) [(O)]
            (16,97) [(O)]
           
            (0,-335) [(S)]
         };
      \end{axis}
   \end{tikzpicture}
   \caption{ein Diagramm}
\end{figure*}



\begin{itemize}
   \item Der Achsenschnittpunkt soll bei $ x_{0}=0,y_{0}=335 $ sein (Beschriftung y-Achse von 335 - 435). \textit{verstehe ich ne so ganz}
   \item An den Punkten soll die Beschriftung stehen (L|R|O). \textit{läuft}
\end{itemize}
\end{document}

Verfasst: Mi 22. Dez 2010, 15:38
von ChrisPZV
Danke für den Vorschlag, das sind doch ein paar Werte, mit denen man experimentieren kann!

Hier mein ernüchterndes Ergebnis:

--> Fehlermeldungen:
* Bei dem Parameter "point meta=explicit symbolic" in "\addplot":
"pgfkeys: I do not know the key '/tikz/point meta' and I am going to ignore it. Perhaps you misspelled it. \end{axis}"

* nodes near coords / nodes near coords align=auto:
"pgfkeys: I do not know the key '/tikz/nodes near coords' and Iam going to ignore it. Perhaps you misspelled it. \end{axis}"

--> (Teil-) Erfolge
* axis y line=center / axis x line=top setzt die Achsen des Systems an die angegebene Stelle, ändert aber leider dabei nichts an der Bemaßung.

* ytick scheint eine automatische Bemaßung zu überschreiben, es werden aber nur Ticks eingezeichnet, die im sichtbaren Bereich sind, das hilft mir leider nicht weiter. :-(

EDIT: Nähere Erläuterung meiner Vorstellung zum Aussehen der y-Achse:
Der Bereich soll im Idealfall von 0-435 gehen (Zu allen y-Werten der Punkte würde dann 335 addiert werden. Da sich aber im y-Bereich von -330 bis 0 nichts abspielt würde ich gerne diese Achse um diesen Bereich kürzen, ich zeichne hier mal in ASCII, wie dann die Achse aussehen sollte:
      y ^
     435|
        |
        |
     335|
        ~
        ~
      30|
       0|
        +--------------------->
                              x
Noch andere Ideen?

Verfasst: Mi 22. Dez 2010, 15:56
von bloodworks
Aber du hast doch einen Punkt bei -335?

Welche pdfplots Version hast du denn? Nicht die hier?
2010/07/14 Version 1.4.1 (git show 1.4.1-1-g64c9e95 )

Verfasst: Mi 22. Dez 2010, 16:20
von ChrisPZV
Da hast du Recht, der Punkt ist drin, wird aber nicht mit dargestellt, weil ich den y-Anzeigebereich auf 0-100 begrenzt habe, damit mir die beiden Achsen im gleichen Maßstab angezeigt werden.

Wie kriege ich denn die pgfplotsversion heraus?

Verfasst: Mi 22. Dez 2010, 19:54
von bloodworks
Mhh wie man nen discontinue zwischen beliebige Werte legt, weiß ich net aber der Rest:
\listfiles % finde deine Version raus

\documentclass{article}            %
                   
\usepackage[latin1]{inputenc}                     



\usepackage{pgfplots}                        % Funktionsplotter

\begin{document}
\section{Das Diagramm}
Hier folgt ein Diagramm:
\begin{figure*}[h]
   \centering
   \begin{tikzpicture}
      \begin{axis}[nodes near coords,nodes near coords align={auto},
   axis y line =left,
      axis x line=bottom,
      ytick={0,30, 335,435},
         xlabel=$x~in~cm$,
         ylabel=$y~in~cm$,
         xmin=-50,
         xmax=+50,
         ymin=0,
         ymax=435,
         enlargelimits=0.1, 
         ]
         \addplot+[only marks,mark=x,point meta=explicit symbolic ]
         coordinates {
            (3,27) [(L)]
            (-10,36) [(L)]
           
            (-7,11) [(R)]
            (5,74) [(R)]
           
            (3,80) [(O)]
            (16,97) [(O)]
           
      %      (0,-335) [(S)]
         };
      \end{axis}
   \end{tikzpicture}
   \caption{ein Diagramm}
\end{figure*}




\end{document}


Verfasst: Do 23. Dez 2010, 10:10
von ChrisPZV
Oh man, sag doch gleich, dass ich die Versionen dann im Log finde... ich suche wie ein Irrer... aber wenigstens mit Erfolg: "Package: pgfplots 2009/02/14 Version 1.2.2" Ich habe das nie extra isntalleirt, sondern es funktionierte einfach...
Mein System ist ein LinuxMint9, bei dem ich folgende Befehle durchratternließ, damit ich mit LaTeX loslegen konnte:
echo "deb http://ppa.launchpad.net/blahota/texmakerx/ubuntu lucid main" >> /etc/apt/sources.list
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B68DBC2C
apt-get install texmakerx biblatex biblatex-dw texlive-bibtex-extra
(alles als root)
Wenn ich mal nach pgfplots in den Quellen suche ergibt sich folgendes:
~ $ sudo apt-cache search pgfplots
texlive-pictures - TeX Live: Graphics packages and programs
~ $ sudo apt-get install texlive-pictures
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut       
Status-Informationen einlesen... Fertig
texlive-pictures ist schon die neueste Version.
texlive-pictures wurde als manuell installiert festgelegt.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 14 nicht aktualisiert.
~ $
Nach dem ich mir allerdings mein texmf-texlive-Verzeichnis mit dem "Drüberkopieren" des Inhalts aus dem aktuellen ZIP-File von pgfplots zerschossen habe, musste ich meine LaTeX-Umgebung durch "reinstall" wieder herstellen:
sudo apt-get remove texlive-pictures
sudo apt-get install texlive-pictures texlive-latex-extra biblatex-dw biblatex
Danach funktionert alles wie vorher, nur noch besser. ;-)
Jetzt werden die Punkte im Beispiel ordentlich beschriftet.
Vielen Dank für die Hilfe!

Endgültige Version:
\listfiles

\documentclass[10pt, a4paper]{article}            % 10pt schriftgröße, DIN A4, Artikel
\usepackage[a4paper,left=2.5cm,right=2cm,top=2.5cm,bottom=2.5cm]{geometry}
\linespread{1.5}                            % Zeilenabstand 1,5
\usepackage{setspace}                        % \singlesspacing | \onehalfspacing
\usepackage[ngerman]{babel}                     % deutsche rechtschreibprüfung/silbentrennung
\usepackage[ansinew]{inputenc}                     % utf8 codierte .tex dateien
\usepackage[T1]{fontenc}                     % korrekte umlaute im ausgabedokument
\usepackage[style=numeric-comp,hyperref]{biblatex}   % Literaturverzeichnis-Style
\usepackage{blindtext}

\usepackage{pgfplots}								% Koordinatenplot

\begin{document}
\section{Das Diagramm}
Hier folgt ein Diagramm:
\begin{figure*}[h]
	\centering
	\begin{tikzpicture}
		\begin{axis}[
			nodes near coords,
			nodes near coords align=right,
			ytick={27,36,11,74,80,97},
			xlabel=$x~in~cm$,
			ylabel=$y~in~cm$,
			xmin=-50,
			xmax=+50,
			ymin=0,
			ymax=100,
			enlargelimits=0.1, % ein bi"{s}chen Rand hinter dem "{a}u"{s}ersten Punkt
			]
			\addplot+[only marks,mark=x,point meta=explicit symbolic]
			coordinates {
				(3,27) [L]
				(-10,36) [L]
				
				(-7,11) [R]
				(5,74) [R]
				
				(3,80) [O]
				(16,97) [O]
				
				(0,-335) [S]
			};
		\end{axis}
	\end{tikzpicture}
	\caption{ein Diagramm}
\end{figure*}


Nun m\"{o}chte ich das Diagramm gerne wie folgt manipulieren:
\begin{itemize}
	\item Der Achsenschnittpunkt soll bei $ x_{0}=0,y_{0}=335 $ sein (Beschriftung y-Achse von 335 - 435).
	\item An den Punkten soll die Beschriftung stehen (L|R|O).
\end{itemize}
\end{document}
Trotzdem, wenn jetzt noch jemand weiß, wie man das discontinue in einer Achse hinbekommt... lasst es hier raus!

Verfasst: Do 23. Dez 2010, 10:37
von iTob
Guten Morgen,


mach dir doch mal die Mühe und lies in der pdfplots DOku den Abschnitt „4.8.11 Axis Discontinuities“ ;)
Hab das selber noch nicht benutzt, aber da sollte drin stehen, was du suchst …



Tobi

Verfasst: Do 23. Dez 2010, 11:02
von ChrisPZV
Jep, gerade gefunden, den Abschnitt. Leider springt nicht das raus, was ich will. Die Doku sieht nicht vor, dass man vor _und_ nach der "Sollbruchstelle" bemaßt oder gar Punkte des Graphen platziert. Für mich ist die gezeigte Lösung also für den Moment zumindest zufriedenstellend.

Danke dir!

Verfasst: Do 23. Dez 2010, 11:07
von iTob
Ah, schade …

Aber es ist ja mathematisch auch nur selten sinnvoll, zumindest, wenn man von kontinuierlichen Daten ausgeht. Und auch bei Messpunkten – also diskreten Werten – kann es den Eindruck verfälschen, weil man die Unterbrechung der Achse nicht auf den ersten Blick sieht und den Messpunkt dann optisch falsch einordnet, meinst du nicht?