PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pgfplot mit tikz editieren?



xyceat
07-12-2009, 22:53
\documentclass{article}
\usepackage{pgfplots}
\begin{document}


\begin{tikzpicture}
\begin{axis}[xbar,enlargelimits=0.15]
\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};

\end{axis}

\tikz{\draw (0,0) -- (1,1);}
\end{tikzpicture}


\end{document}


folgendes Problem, ich möchte in dem Diagramm oben einfach noch eine Linie ziehen. Da ich den Grafen in der Axisdefinition schon als xbar definiert habe kann ich nicht einfach andere funktionen einzeichnen. Nun wollte ich es mit TIKZ einfach macehn. Hab meinen kläglichen versuch mal in den Code eingebracht. Leider rutscht dann die Grafik bei mir mitten in den Fließtext rein. Wie muss der Syntax richtig lauten ?

bobmalaria
07-12-2009, 23:55
hi,

du kannst extra description missbrauchen


\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\begin{document}

\vspace*{3cm}
\begin{tikzpicture}[remember picture,overlay]

\begin{axis}[xbar,enlargelimits=0.15,
extra description/.code={
\draw[line width=2pt,red] (0,0) -- (1,1);
\draw[line width=2pt,red] (0,1) -- (1,0);}
]

\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};

\end{axis}


\end{tikzpicture}


\end{document}

xyceat
08-12-2009, 11:01
gibt es auch eine möglichkeit, dass ich die linie in den Koordinanten des von pgfplot erstellten Koordinatensystem setzen kann?

also z.b. wenn ich bei +1,32 auf der x achse eine horziontale linie haben möchte. dass ich dann 1,32 schreiben kann bei der definition der linie ?

borose
08-12-2009, 12:04
ja geht:


\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\begin{document}


\begin{tikzpicture}
\begin{axis}[xbar,enlargelimits=0.15]
\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};

\draw[red] (axis cs:10,10) -- (axis cs:10,0);

\end{axis}
\end{tikzpicture}

\end{document}

xyceat
09-12-2009, 11:53
ah, das funktioniert ja wunderbar :-)

jetzt hab ich noch eine Frage, die mir das Leben unglaublich erleichtern würde.

Und zwar ich hab bei der x-AchsenBeschriftung keine Nummern sonder Alphanumerische Bezeichnungen. Nun geb ich dir im Mometn alle mit xticklabels={bezeichnung1,bezeichnung2,bezeichnung 3} ein. Sehr aufwändig und Fehleranfällig wenn man da viele Beschriftungen braucht.

Die dazugehörigen Daten lese ich aus einer ASCII Tabell ein. Nun ist die Frage, kann ich die X-Labels auch irgendwie aus dieser Tabelle rausziehen ?

borose
09-12-2009, 13:55
Hi,

zum tabellen einlesen gibts \pgfplotstableread. Allerdings glaube ich nicht, das man das dann (per foreach) in xticklabels reinbekommt.

Zum einlesen externer Daten gibts noch das package datatool (ftp://dante.ctan.org/tex-archive/help/Catalogue/entries/datatool.html). Inwieweit man damit aber mit kanonen auf Spatzen schießt weiß ich nicht, da ich selbst noch nie benutzt habe ...

Zusätzlich musst du natürlich auf Sonderzeichen in deiner alphanumerischen tabelle acht geben.

grüße

xyceat
09-12-2009, 15:07
naja gut ich seh schon, das wird zu aufwändig. naja dann tip ich die 10 - 15 sachen eben mit copy und paste ein. zwar nicht die eleganteste lösung. aber sollte funktionieren :)

hät nochmal nee kleine frage zu dem diagramm von oben mit dem code




\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\begin{document}


\begin{tikzpicture}
\begin{axis}[xbar,enlargelimits=0.15]
\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};

\draw[red] (axis cs:10,10) -- (axis cs:10,0);

\end{axis}
\end{tikzpicture}

\end{document}




Und zwar handelt sich sich bei dem Diagramm ja um eine xbar. D.h. wenn ich legendenelemte hinzufüge für die einzelnen Datenreihen dann macht der so schöne Symbole für die Balken. Gibt es jetzt auch eine Möglichkeit wie ich meine rote Linie in die Legende bekomme kann ohne größeren Aufwand? Am besten auch mit dem Symbol von einer Linie :)

borose
09-12-2009, 16:01
wenn ich das richtig verstanden hab: ein roter strich im symbol des jeweiligen plots?


\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\begin{document}


\begin{tikzpicture}
\begin{axis}[xbar,enlargelimits=0.15]
\pgfplotsset{/pgfplots/legend image code/.code={
\draw[#1] (0cm,-0.1cm) rectangle (0.1cm,0.2cm)
(0.2cm,-0.1cm) rectangle (0.3cm,0.1cm) ;
\draw [red,] (-0.1cm,0.15cm) -- (0.31cm,0.15cm);}}
\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};
\legend{nr1,nr2}
\draw[red] (axis cs:10,10) -- (axis cs:10,0);

\end{axis}
\end{tikzpicture}
\end{document}

xyceat
09-12-2009, 16:18
sorry, hab ich mich wohl schlecht ausgedrückt.

Nein ich meinte, dass ich für die rote Linie gerne einen eigenen Legendeneintrag hätte.

also wie jetzt bei dir (Bild1)"nr1" (Bild2)"nr2"(Biild vo Linie)"NameLinie".

Also die Linie so behandeln als obs ein eigener Plot wär...


Edit: Also noch so einen Eintrag: http://img5.imagebanana.com/view/ejyhyqz/Unbenannt.jpg

bobmalaria
09-12-2009, 16:33
wir hatten schon das gleiche problem,. auf der mailingliste wurde mir dann eine lösung präsentiert die mir allerdings nur fehler produziert hat.

in der entwicklerversion ist dieses feature wohl implemetiert, ansonsten geht der weg wohl darüber, eigene styles zu verwenden.

leider konnte ich aber keine lösung produzieren. eventuell lohnt es sich nochmal die mailingliste zu benachrichtigen

gruss

xyceat
09-12-2009, 16:43
was ist denn die "mailingliste" :)

Edit: Ich war mal so frech und hab den Autor selbst angeschrieben. Unglaublich netter Mensch, hat Email sogar innerhalb von einer Stunde beantwortet. Unglaublich.


Die Ironie dahinter ist, er hat mein Problem in der neuen Entwicklerversion schon umgesetzt :)

http://pgfplots.sourceforge.net/

pdf Seite 109 :-)

xyceat
09-12-2009, 18:05
tjo, jetzt kommt die frage, die kommen musste:

kann ich irgendwie die "developerversion" nutzen? muss ich die selber compilieren? wenn ja, krieg ich das hin und wenn ja wie ? ^^

xyceat
10-12-2009, 23:51
wenn ich das richtig verstanden hab: ein roter strich im symbol des jeweiligen plots?


\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\begin{document}


\begin{tikzpicture}
\begin{axis}[xbar,enlargelimits=0.15]
\pgfplotsset{/pgfplots/legend image code/.code={
\draw[#1] (0cm,-0.1cm) rectangle (0.1cm,0.2cm)
(0.2cm,-0.1cm) rectangle (0.3cm,0.1cm) ;
\draw [red,] (-0.1cm,0.15cm) -- (0.31cm,0.15cm);}}
\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};
\legend{nr1,nr2}
\draw[red] (axis cs:10,10) -- (axis cs:10,0);

\end{axis}
\end{tikzpicture}
\end{document}



Hi,

du borose, ich hät nochmal nee Frage. Ich komm mit den styles einfach noch nicht klar. Du hast da oben einen style abgeändert, das check ich auch noch. Kann ich auch einen neuen style definieren? hätte gern einen für meine legende wo ich nur eine gestrichelte linie habe. kriegs aber irgendwie nicht gebacken :-(

borose
11-12-2009, 11:49
wie soll denn die gestrichelte linie aussehen: umrandungslinie weicht ja vom pattern der bars ab ... hier mal eine variante, die beides abdeckt:


\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{patterns}

\begin{document}

\begin{tikzpicture}

\begin{axis}[xbar,enlargelimits=0.15]

\pgfplotsset{/pgfplots/legend image code/.code={
\draw [#1, line width=0.2pt]
(0,-0.5pt) rectangle (3pt,0.5pt)
(4.5pt,-0.5pt) rectangle (7.5pt,0.5pt)
(9pt,-0.5pt) rectangle (12pt,0.5pt);
}}

\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};
\legend{nr1,nr2}
\draw[red] (axis cs:10,10) -- (axis cs:10,0);

\end{axis}
\end{tikzpicture}

\end{document}

xyceat
11-12-2009, 13:09
Hi,
dein Beispiel ist super. Aber wenn ich es richtig verstehe änderst du ja den legend image style. kann man auch irgendwie den style unter einem eigenen namen abspeichern. also z.b. "mein style". In der Anleitung steht da zwar was dazu mti apend style. aber ich krieg den synatax nicht so angeordnert, dass latex ihn nimmt :-(

borose
11-12-2009, 15:04
Hi!

So?


\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{patterns}

\tikzstyle{myxbarlegend}=
[
/pgfplots/legend image code/.code=
{\draw [##1, line width=0.2pt]
(0,-0.5pt) rectangle (3pt,0.5pt)
(4.5pt,-0.5pt) rectangle (7.5pt,0.5pt)
(9pt,-0.5pt) rectangle (12pt,0.5pt);
}
]

\begin{document}

\begin{tikzpicture}

\begin{axis}[xbar,enlargelimits=0.15, myxbarlegend]

\addplot
[draw=blue,pattern=horizontal lines light blue]
coordinates
{(10,5) (15,10) (5,15) (24,20) (30,25)};
\addplot
[draw=black,pattern=horizontal lines dark blue]
coordinates
{(3,5) (5,10) (15,15) (20,20) (35,25)};
\legend{nr1,nr2}
\draw[red] (axis cs:10,10) -- (axis cs:10,0);

\end{axis}
\end{tikzpicture}

\end{document}