PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz säulendiagramme ....



xyceat
28-11-2009, 11:05
Hi,

folgendes Problem, ich hab in Excel ca 100 Säulendiagramme die in Latex müssen. Die Lösung als pdf einzufügen ist irgendwie doof find ich ich.

da alle diagramme sehr ähnlich sind und ich nur die Werte anpassen müsste wenn ich mal ein Säulendiagramm als Vorlage habe würd ich es gern in tikz machen.
Problem ist, ich find die Dokumentation einfach erschlagend die da mit dabei ist. Vorallem in Englisch und Fachchinesisch tu ich mich richtig schwer.

Gibts kein Buch auf Deutsch, dass sich damit beschäftigt ?

danke im voraus !!

mechanicus
28-11-2009, 11:12
Hallo,



Gibts kein Buch auf Deutsch, dass sich damit beschäftigt ?
Derzeit noch nicht. Soll aber evtl. eins kommen.

Hier hast du mal eine deutsche Erklärung zu deinem Problem:
http://www.statistiker-wg.de/pgf/tutorials/barplot.htm

Gruß
Marco

bobmalaria
28-11-2009, 11:52
hi,

schau dir das paket pgfplots an. es basiert auf tikz. alle definitionen können global vorgenommen werden, die rohdaten der diagramme müssen nur als ascii-datenfile vorliegen.

die doku zum paket hat viele beispiele, sodass der einstieg sehr einfach sein sollte (copy&paste).

gruss

xyceat
28-11-2009, 12:27
hi bob, das werd ich mir mal angucken.

was heißt als ascii datenfile? kriegt man sowas aus excel raus ?

Bilbo
28-11-2009, 13:08
was heißt als ascii datenfile? kriegt man sowas aus excel raus ?

Ist eine normale Textdatei, dessen Spalten z. B. mit einem Komma oder Semicolon getrennt sind.

xyceat
28-11-2009, 13:17
ah ok, hab mir gerade mal bissal was dazu angeschaut. ich glaub ich kann meine daten von hand eingeben. sind ja nicht soviele...

aber was anderes:

Ich wollt jetzt einfach mal ein einfaches beispiel aus der anleitung in mein latex reinkopieren und schauen ob das geht.

also hab ich das paket geladen mit:
\usepackage{pgfplots}

hab sonst nichts verändert, (hab e das paket da geladen wo ich alle meine pakete lade).

und nun bekomm ich beim kompilierne schon 2 Fehlermeldungen:

1. !pdfTex error (setup): \pdfminorversion cannot be changed after data is written to the PDF file.
\Hy@Outlinename ... utline goto name (#2)count#2(#4)

und

2.

Fatal error occurred, no output PDf file produced.


wenn ich \usepackage{pgfplots} wieder rausnehme geht alles wieder.

warum scheiterts schon am ersten schritt? :-(

xyceat
28-11-2009, 13:32
so für die Nachwelt:

das package \pdfminorversion=6 %für neuere bilder (pdf version)

muss ich vor \usepackage{pgfplots} bringen.

fragt mich nicht wieso, ich bin der Noob :)

xyceat
28-11-2009, 14:59
So nochmal eine Frage, ich hoffe mir Antwortet jemand :)

Hier mal der Code von meinem aktuellen Diagramm:

\begin{tikzpicture}
\begin{axis}[height=10cm,xtick={0,...,4},xticklabels={A,B,C,D,E ,F},ymin=0.0,ymax=0.140,ylabel=Standardabweichung \lbrack mm\rbrack]

\addplot[ybar] plot coordinates
{(0,0.062) (1,0.053) (2,0.053) (3,0.116) (4,0.097)};
\addplot coordinates
{(0,0.062)(3,0.062)};
\legend{Standardabweichung Spritzprozess}
\end{axis}
\end{tikzpicture}


Paar generelle Fragen:

1. Die y-Achenbeschriftung ist zu nahe an de y-Achse. Wie geht das weite weg?
2. Die Zahlen an der y-Achse werden als Exponentialzahlen dargestellt, ich würds aber gern ausgeshrieben in Dezimal haben.


Wer kennt sich da aus :)

bobmalaria
28-11-2009, 18:09
hi,

du kannst es in der anleitung finden.


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

%\pgfplotsset{every y tick scale label/.append style={at={(0,1)},above right,inner sep=0pt,xshift=-1cm}}
\pgfkeys{/pgf/number format/.cd,fixed,precision=4}
\begin{tikzpicture}
\begin{axis}[height=10cm,
xtick={0,...,4},xticklabels={A,B,C,D,E ,F},
ymin=0.0,
ymax=0.140,
ylabel=Standardabweichung in mm
]

\addplot[ybar] plot coordinates
{(0,0.062) (1,0.053) (2,0.053) (3,0.116) (4,0.097)};
\addplot coordinates
{(0,0.062)(3,0.062)};
\legend{Standardabweichung Spritzprozess}
\end{axis}
\end{tikzpicture}

\end{document}

in rot die nummer formatierung (aud der pgfplotstable anleitung) und in blau die default definition für die achse. ist aber nach nummer umformatierung nicht unbedingt nötig

gruss

xyceat
29-11-2009, 22:41
Hi,

danke für deine HIlfe, klappt ja supi :D

Leider schon wieder ein Problem, das ich mit Anleitung nicht lösen kann:

wie krieg ich bei der horizontalen linie die Markierungspunkte weg. Wie ich sie ändern kann find ich in der Anleitung. Da gibts ja auch eine mega Auswahl. Nur wie ich die deaktiviere, finde ich leider nicht :-(

Und dann noch etwas: horizonalte Hilfslinien. Gibts sowas auch oder muss ich die von "hand" machen mit tikz ?

bobmalaria
30-11-2009, 00:27
hi,

vielleicht so mit ymajorgrids


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

%\pgfplotsset{every y tick scale label/.append style={at={(0,1)},above right,inner sep=0pt,xshift=-1cm}}
\pgfkeys{/pgf/number format/.cd,fixed,precision=4}
\begin{tikzpicture}
\begin{axis}[height=10cm,
xtick={0,...,4},xticklabels={A,B,C,D,E ,F},
ymin=0.0,
ymax=0.140,
ylabel=Standardabweichung in mm,
ymajorgrids
]

\addplot[ybar,fill=blue] plot coordinates
{(0,0.062) (1,0.053) (2,0.053) (3,0.116) (4,0.097)};
\addplot[red,mark=none, line width=1pt] coordinates
{(0,0.062)(3,0.062)};
\legend{Standardabweichung Spritzprozess}
\end{axis}
\end{tikzpicture}

\end{document}

xyceat
30-11-2009, 23:02
Man du bist Prima. So langsam komm ich auch hinter die Anleitung, echt der Hammer was man alles machen kann!

Bin leider über noch ein, hoffentlich einfach zu behebendes Problem gestoßen.
Woltle in der Legende sehen wie die Balken eingefärbt /scharfiert sind. Hab dazu eine Zeile im Quelltext hinzugefügt:


\pgfplotsset{
/pgfplots/legend image code/.code={%
\draw[#1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
}}

Nun macht er jedoch leider für die rote Linie auch ein Kästchen in der Legende. Das ist natürlich doof. Gibts da abhilfe ?

Schonmal 1000 Dank !!

Gruß

Stefan



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



\pgfplotsset{
/pgfplots/legend image code/.code={%
\draw[#1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
}}
\pgfkeys{/pgf/number format/.cd,fixed,precision=4}
\begin{tikzpicture}
\begin{axis}[width=10cm,
xlabel=Fin,
xtick={0,...,4},
xticklabels={A,B,C,D,E,F},
ytick={0.000,0.020,0.040,0.060,0.080,0.100,0.120,0 .140},
ylabel=Standardabweichung \lbrack mm\rbrack,
ymin=0.0,
ymax=0.140,
ymajorgrids]
\usetikzlibrary{patterns}


\addplot[ybar,draw=black,pattern=north east lines] plot coordinates
{(0,0.062) (1,0.053) (2,0.053)};
\addlegendentry{Bereich A}


\addplot[ybar,fill=green] plot coordinates
{(3,0.116) (4,0.097)};
\addlegendentry{Bereich B}


\addplot[red, mark=none] coordinates
{(0,0.062)(3,0.062)};


\addlegendentry{OTG}

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

xyceat
02-12-2009, 15:14
okay, wie es aussieht gibt es dafür keine lösung :p

dann hät ihc noch ein anderes anliegen, vllt. hab ich die logik auch noch nicht ganz verstanden.

mit der Zeile

\pgfplotsset{every axis/.append style={
extra description/.code={
\node at (0.5,0.5) {Center!};

kann ich ja beliebg was in ein Diagramm schreiben. Das Problem ist jetzt nur, das ist doch eine gloable Einstellung, der mcht mir das ja jetzt bei jedem Diagramm. Ich möchte das aber nur bei einem einzigen machen? In der Anleitung sind irgendwie alle Befehle global gezeigt. Man muss die doch irgendwie auch auf ein einzelnes Diagramm anwenden können, oder ?

bobmalaria
02-12-2009, 17:11
hi,
man kann auch lokal einstellungen vornehmen


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



%\pgfplotsset{
%/pgfplots/legend image code/.code={%
%\draw[#1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
%}}
\pgfkeys{/pgf/number format/.cd,fixed,precision=4}
\begin{tikzpicture}
\begin{axis}[
legend image code/.code={%
\draw[#1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);}
width=10cm,
xlabel=Fin,
xtick={0,...,4},
xticklabels={A,B,C,D,E,F},
ytick={0.000,0.020,0.040,0.060,0.080,0.100,0.120,0 .140},
ylabel=Standardabweichung \lbrack mm\rbrack,
ymin=0.0,
ymax=0.140,
ymajorgrids,
extra description/.code={
\node at (0.5,0.5) {Center!};}
]
\usetikzlibrary{patterns}


\addplot[ybar,draw=black,pattern=north east lines] plot coordinates
{(0,0.062) (1,0.053) (2,0.053)};
\addlegendentry{Bereich A}


\addplot[ybar,fill=green] plot coordinates
{(3,0.116) (4,0.097)};
\addlegendentry{Bereich B}


\addplot[red, mark=none] coordinates
{(0,0.062)(3,0.062)};


\addlegendentry{OTG}

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

mit extra description und mit hilfe einer tikz matrix könntest du auch die legende "einfach" nachbauen. allerdings hab ich es mit der paltzierung noch nicht raus. mal die mailing liste fragen...


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

\begin{document}



%\pgfplotsset{
%/pgfplots/legend image code/.code={%
%\draw[#1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
%}}

\pgfkeys{/pgf/number format/.cd,fixed,precision=4}
\begin{tikzpicture}
\begin{axis}[
legend image code/.code={%
\draw[#1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);}
width=10cm,
xlabel=Fin,
xtick={0,...,4},
xticklabels={A,B,C,D,E,F},
ytick={0.000,0.020,0.040,0.060,0.080,0.100,0.120,0 .140},
ylabel=Standardabweichung \lbrack mm\rbrack,
ymin=0.0,
ymax=0.140,
ymajorgrids,
]
\addplot[ybar,draw=black,pattern=north east lines] plot coordinates
{(0,0.062) (1,0.053) (2,0.053)};
%\addlegendentry{Bereich A}
\addplot[ybar,fill=green] plot coordinates
{(3,0.116) (4,0.097)};
%\addlegendentry{Bereich B}
\addplot[red, mark=none] coordinates
{(0,0.062)(3,0.062)};
%\addlegendentry{OTG}
\end{axis}
\end{tikzpicture}

%Legend as it should be
\begin{tikzpicture}%
\matrix[draw]{%
\draw[draw=black,pattern=north east lines] (0cm,-0.1cm) rectangle (0.6cm,0.1cm); & \node{legend 1};\\
\draw[draw=black,fill=green] (0cm,-0.1cm) rectangle (0.6cm,0.1cm); & \node{legend 2};\\%
\draw[red, line width=1pt] (0cm,0cm) -- (0.6cm,0cm); & \node{legend 3};\\};
\end{tikzpicture}

\end{document}

xyceat
02-12-2009, 17:51
sehr sehr cool!

aber die logik hinter dem ganzen hab ich noch nicht ganz überrissen.

In der Anleitung sind ja immer so rote Pfade, wie z.b. /pgfplots/extra description/.code={h... i}

was sind das für pfade? da wo die style hinterlegt sind?

und diese kann ich ja nur mit \pgfplotsset{} ansteuern, nicht wahr ?

aber d.h. alle befehle die in code={} stehen kann ich auch lokal in der axis definiton anwenden?

:o



Hät jetzt jedoch noch eine rel. wichtige Sache:

http://img5.imagebanana.com/view/2kqg6z5g/Unbenannt.jpg

Ein Diagramm dieser Art müsste ich in Latex darstellen können. In der Anleitung hab ich beide Arten von Diagrammen gefunden. Also z.b. 2 Balken in einen x-Wert und die sogenannten "stacked bars".

Aber wie kann ich die beiden, wie in der oberen Grafik zu sehen, vereinen?

Spiel jetzt schon seit Stunden rum, aber ich glaube es ist nicht möglich mehrere Säulen einen x-Wert zuzuordnen, ohne dass man "ybar" beim koordinantensystem definiert. Folgend ist ein code anhängt für mehree Säulen zu einem x-Wert. Für mein Problem müsste ich in dem Beispiel jetzt bei \addplot coordinates noch irgendwo das "stacked bar" reinflicken.

Ist sowas überhaupt möglich? Alle Beispiele in der Anleitung zeigen, dass eine stacked bar nur gebaut werden kann, wenn die stacked Bar schon in die Koordinantenfestlung berücksichtigt wird...

Danke für deine Hilfe,

ein verzweifelter Stefan :)




\begin{tikzpicture}
\begin{axis}[
x tick label style={
/pgf/number format/1000 sep=},
ylabel=Population,
enlargelimits=0.15,
legend style={at={(0.5,-0.15)},
anchor=north,legend columns=-1},
ybar,
bar width=7pt,
]
\addplot
coordinates {(1930,50e6) (1940,33e6)
(1950,40e6) (1960,50e6) (1970,70e6)};
\addplot
coordinates {(1930,38e6) (1940,42e6)
(1950,43e6) (1960,45e6) (1970,65e6)};
\addplot
coordinates {(1930,15e6) (1940,12e6)
(1950,13e6) (1960,25e6) (1970,35e6)};
\legend{Far,Near,Here}
\end{axis}
\end{tikzpicture}

xyceat
05-12-2009, 13:23
keiner ? :-)