PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pgfplot 2 Probleme: Legende, Datenpunkte



_Daniel_
06-08-2011, 18:56
Hallo, ich schon wieder.

Ich habe noch ein Problem beim plotten meiner Daten. Ich habe hier jetzt ein paar Messergebnisse, die ich als Punkte in einem Diagramm einfügen möchte. Anschließend rufe ich Gnuplot auf und lasse eine Kurve durch die Messwerte legen.

Dabei ergeben sich im Moment noch zwei Probleme: Obwohl ich den Legendeneintrag meiner Meinung nach exakt zugeordnet habe wird die Legende nicht richtig dargestellt. Die eingezeichneten Punkte sollen in die Legende, es erscheint aber die Kurve die Gnuplot zeichnet. Wo mache ich da den Fehler?

Die zweite Frage, die vielleicht auch die Antwort auf die erste ist: Wie kann ich die Gestalt der Datenpunkte verändern? D.h. Quadrat, Raute, Kreis habe ich gefunden, aber wie kann ich da die Farbe zuordnen? In dem unten eingefügten Minimalbeispiel erstellt er in der oberen Kurve braune Kreise mit schwarzen Kreuzen? Woher kommen die Kreuze, wie kann ich die Farbe der Punkte verändern?
Das pgfplot manual habe ich gelesen, dort steht auch etwas zu den lineStyles (S.83,84) die mir den braunen Punkt erzeugt haben, den blauen habe ich aus irgendeinem Beispiel. Dann gibts da noch das Kapitel: 4.6.6 Cycle Lists { Options Controlling Line Styles,
allerdings ist das für mich wohl zu umständlich für die zwei oder drei Plots, bzw. ich habe das auch nicht verstanden.

Hier mal mein Minimalbeispiel:


\begin{filecontents}{test1.dat}
5 50
15 80
45 120
\end{filecontents}

\begin{filecontents}{test2.dat}
15 90
30 120
40 140
\end{filecontents}

\documentclass[%
a4paper,% Wir verwenden A4 Papier.
oneside,% Einseitiger Druck.
idxtotoc% Index ins Inhaltsverzeichnis einfügen. bibliography
]{scrartcl}
\thispagestyle{empty}
%\usepackage[left=3.0cm,right=2cm,top=1cm,bottom=2cm]{geometry}
\usepackage[latin1]{inputenc} %9
\usepackage[T1]{fontenc}

\usepackage{tikz}



\usepackage{pgfplots}
\pgfplotsset{compat=1.3}

\begin{document}
\begin{tikzpicture}
\begin{axis}
[
width=14cm,height=6cm,
scale only axis, %scalierung der x Achse
xmin=0,xmax=55, % xmin und max
xtick={0,5,10,15,20,25,30,35,40,45,50,55},
ymin=50,ymax=150,
ytick={50,70,...,150},
minor y tick num =1, % ymin und max
axis y line*=left, % the '*' avoids arrow heads
xlabel={Die X-Achse},
ylabel={Wirkungsgrad [$\%$]},
legend style={name={leg1},at={(0.97,0.97)},anchor=north east,legend columns=1},
grid=major]


\addplot+[
only marks,
mark=square*,
nodes near coords,
nodes near coords align={vertical},
enlargelimits=0.2,
black] table{test1.dat};
\addlegendentry{Punkte test1},
%
\addplot+[
raw gnuplot,
mark=none,
dotted,
line width=1pt,
black
] gnuplot {
f(x)=a*x**3+b*x+c;
fit f(x) 'test1.dat' using 1:2 via a,b,c;
plot [x=5:45] f(x);
};


\addplot+[
only marks,
mark=otimes*,
nodes near coords,
nodes near coords align={north west},
enlargelimits=0.2,
black] table{test2.dat};
\addlegendentry{Punkte test2},


\addplot+[
raw gnuplot,
mark=none,
dashed,
line width=1pt,
black] gnuplot {
f(x)=a*x**3+b*x+c;
fit f(x) 'test2.dat' using 1:2 via a,b,c;
plot [x=15:40] f(x);
};


\end{axis}

\end{tikzpicture}

\end{document}




Es wäre schön wenn sich das mal jemand anschaut und mir helfen kann.
Schon mal vielen Dank.

Gruß Daniel

Feuersaenger
06-08-2011, 23:34
Hi Daniel,

die verrutschte Legende kommt daher, dass pgfplots keinen legendeintrag fuer den zweiten Plot enthaelt. Loesung: mache nach der fitline noch sowas wie \addlegendentry{fit line} oder gebe in der optionsliste 'forget plot' and.

Die Gestalt der Datenpunkte wird ueber die cycle list kontrolliert. Da gibt es immer drei moeglichkeiten in pgfplots:

a) Du benutzt NUR die cycle lists (d.h. Du laesst die optionaelen Argumente nach \addplot weg)

b) Du benutzt die cycle list UND eigene Argumente (d.h. ein '+' : \addplot+[<eigene optionen>]). Das machst Du derzeit - die fill color fuer die marker kommen von der voreingestellten cycle list.

c) Du benutzt NUR eigene Argumente (d.h. \addplot[<eigene optionen>] ohne plus). Das waere bei Dir zu empfehlen. Die marker kannst Du mit 'mark options={fill=green}' anpassen. Interessant sind vielleicht 'rotate', 'mark size', 'draw', 'fill'.

Mit liebem Gruss

Christian

_Daniel_
07-08-2011, 12:00
Vielen Dank Christian,

Problem gelöst. Das ist ein echt tolles Paket.

Gruß Daniel

_Daniel_
07-08-2011, 18:26
Vielleicht doch noch eine Frage:
Ich habe jetzt ein zweites Diagramm, dass ich nach dem Vorbild erstelle, welches ich oben gepostet habe. Nun möchte ich Beschriftung der Datenpunkte ändern. Die Zahlen sind im Moment viel zu groß, da die Datenpunkte jetzt sehr dicht beieinander liegen. Gleichzeitig muss ich die Position der Beschriftung für jeden Punkt ändern, da sie sich gegenseitig überdecken. Ich habe schon ein bisschen ausprobiert, aber jedes mal neue Fehlermeldungen erzeugt. Die Funktionen auto, horizontal und vertikal werden da vermutlich nicht aussreichen. Ich denke ich werde Koordinaten angeben müssen. Da stehe ich vor der Frage wie ich die Koordinaten des schon erstellten Diagramms nutzen kann. Dazu hatte ich auch schon mal in das Tikz Manual geschaut, bin dort aber auch nicht fündig geworden.

Gruß Daniel

Feuersaenger
10-08-2011, 19:55
Hi Daniel,

in dem Fall macht es vermutlich Sinn, zunaechst mal mit dem Darstellungsstyle fuer 'nodes near coords' zu experimentieren. ICh weiss auswendig nicht, wie das heisst - vermutlich 'nodes near coords style={<optionen>}' oder so (steht in pgfplots.pdf in der naehe von nodes near coords). Probier mal, als <optionen> sowas wie 'font=\tiny' oder 'font=\footnotesize' anzugeben. Eventuell ist auch 'scale=0.4' oder so hilfreich.

Das angeben individueller shifts ist standardmaessig nicht vorgesehen. Was aber geht, ist manuell irgendwelche Texte in die Abbildung zu malen:

\node at (axis cs:3,4) {<text>};

Die Loesung ist aber sicher aufwaendiger, weil Du dann alles von Hand machen musst.

Mit liebem Gruss

Christian