PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Balkendiagramme: Zwei Balken eine mittige Beschriftung



Dr.Wackelzahn
06-12-2008, 22:21
Hallo,
jetzt wird es etwas kniffliger. Ich benötige ein Balkendiagramm in welchem zwei Balken sich eine mittige Beschriftung teilen.
Ähnlich dem hier hinterlegten Beispiel, welches ich allerdings mit Gimp so halbwegs zusammen gestöpselt habe.
Wichtig scheinen mir die Ticks zwischen den beiden zusammen gehörenden Balken, so dass es eindeutig ist, dass die zentrierte Beschriftung für beide gilt.
VIelen Dank,
Gruß,
Alex

bobmalaria
06-12-2008, 23:12
hi,

schau dir mal pgfplot an.
in der anleitung auf seite 30 (http://www.ctan.org/tex-archive/graphics/pgf/contrib/pgfplots/doc/latex/pgfplots.pdf), das sieht fast so aus wie du es haben möchtest.

gruß

Dr.Wackelzahn
06-12-2008, 23:16
Bin von pgfplots weg, da es meinen Anforderungen nicht genügt.
Es ist, scheinbar, nicht möglich alphanumerische Beschriftungen in pgfplots zu verwenden. Die würde ich allerdings benötigen, daher nehme ich pstricks.

voss
06-12-2008, 23:17
jetzt wird es etwas kniffliger. Ich benötige ein Balkendiagramm in welchem zwei Balken sich eine mittige Beschriftung teilen.
Ähnlich dem hier hinterlegten Beispiel, welches ich allerdings mit Gimp so halbwegs zusammen gestöpselt habe.
Wichtig scheinen mir die Ticks zwischen den beiden zusammen gehörenden Balken, so dass es eindeutig ist, dass die zentrierte Beschriftung für beide gilt.


dann änderst du bei der x-Achse einfach das dx=...

Herbert

Dr.Wackelzahn
06-12-2008, 23:25
EDIT:

Funktioniert leider nicht, da es nur für das erste Balkenpaar funktioniert, dann ist wieder ein Versatz drin (siehe Anhang).
Im Bild sollten die Ticks an die Stelle der Mauszeiger und nicht auf Höhe der Hand.

Und wie bekomme ich dann noch die mittige, ggf. zweizeilige Beschriftung unter diesen Tick?

voss
06-12-2008, 23:34
EDIT:

Funktioniert leider nicht, da es nur für das erste Balkenpaar funktioniert, dann ist wieder ein Versatz drin (siehe Anhang).
Im Bild sollten die Ticks an die Stelle der Mauszeiger und nicht auf Höhe der Hand.

Und wie bekomme ich dann noch die mittige, ggf. zweizeilige Beschriftung unter diesen Tick?


\documentclass[a4paper,11pt]{article}

\usepackage{pstricks-add}

\begin{document}
\begin{pspicture}(5,5)
\psaxes[dx=1.5cm,labels=y,ticksize=0 -5pt]{->}(5,5)
\rput[r]{90}(1.5,-0.2){\parbox{3cm}{Hier steht\\ ganz viel Text,
der so lang sein kann, wie er will}}
\uput[-90]{90}(4.5,0){\parbox{3cm}{Eins\\zwei drei und noch vier}}
\end{pspicture}

\end{document}



zwei Möglichkeiten.

Herbert

voss
06-12-2008, 23:36
EDIT:

Funktioniert leider nicht, da es nur für das erste Balkenpaar funktioniert, dann ist wieder ein Versatz drin (siehe Anhang).
Im Bild sollten die Ticks an die Stelle der Mauszeiger und nicht auf Höhe der Hand.

Und wie bekomme ich dann noch die mittige, ggf. zweizeilige Beschriftung unter diesen Tick?

Ich habe keine Kristallkugel, um genau zu wissen, was _du_ eigentlich gemacht hast.

Herbert

Dr.Wackelzahn
06-12-2008, 23:56
Entschuldigung, ich hatte den Code vergessen:


\documentclass[12pt]{article}
\usepackage{fp-basic,pstricks-add,pst-eps,xcolor}
\usepackage[dvips,margin=0.25cm,paperwidth=15.25cm,paperheight =11.25cm]{geometry}
\usepackage[ngerman]{babel}
\newcommand{\setvar}[2]{
\newcommand{#1}{#2}
}
\pagestyle{empty}

\input{Farben}

\begin{document}

\def\nameone{fehlende Primärstabilität,keine Integration,peri Wucherung}
\def\dataone{20,80,60}
\def\datatwo{40,100,0}

\newcounter{yoneVal}
\newcounter{ytwoVal}
\newcounter{xoneVal}
\newcounter{xtwoVal}

\setvar{\xtitel}{Grund Pantation}
\setvar{\xTitelPosition}{30}
\setvar{\ytitel}{Anzahl der Implantationen}
\setvar{\yTitelPosition}{1}
\setvar{\xmin}{0}
\setvar{\ymin}{0}
\setvar{\xmax}{6}
\setvar{\ymax}{100}
\setvar{\schritt}{10}
\setvar{\breite}{12.5}
\setvar{\hoehe}{8}
\setvar{\strichbreite}{5}
\setvar{\beschriftungswinkel}{55}
\setvar{\yRaster}{5}

% Interne Verarbeitung
\setvar{\yabstandeinheit}{\yabstand cm}
\setvar{\strichlaenge}{-\strichbreite}
\FPdiv{\balkenbreite}{\breite}{\xmax}
\FPdiv{\balkenbreite}{\balkenbreite}{2}
\setvar{\breiteeinheit}{\breite cm}
\setvar{\hoeheeinheit}{\hoehe cm}
\FPadd{\ymax}{\ymax}{\schritt}
%\FPsub{\ydiff}{\ymax}{\ymin}
\FPdiv{\yabstand}{1}{\ymax}
\FPmul{\yabstand}{\yabstand}{\hoehe}
\FPmul{\yabstand}{\yabstand}{\schritt}
\FPadd{\xmax}{\xmax}{\balkenbreite}
\setvar{\xTitelPos}{-\xTitelPosition}
\setvar{\yTitelPos}{-\yTitelPosition}

\psset{llx=-1.6cm,lly=-0.6cm,
yAxisLabel=\ytitel,
yAxisLabelPos={\yTitelPos,c},
xAxisLabel=\xtitel,
xAxisLabelPos={c,\xTitelPos}}
\begin{psgraph}[Dy=\schritt,dy=\yabstandeinheit,Dx=1,dx=1.5,
yticksize=\strichlaenge pt 0pt,
xticksize=0 -5pt,xsubticks=0,
ysubticks=\yRaster,labels=y](\xmin,\ymin)(\xmax,\ymax){\breiteeinheit}{\hoehee inheit}
% Hilfslinien
\psaxes[labels=none,
ticks=y,
yticksize=0 \xmax,
ysubticks=5,
subticksize=1,
tickcolor=black!20,
subtickcolor=black!30,
subticklinestyle=dotted,
Dy=\schritt,
dy=\yabstandeinheit](\xmax,\ymax)
\psforeach{\nA}{\dataone}{
\stepcounter{xoneVal}
\psline[linewidth=\balkenbreite,linecolor=dia1](\thexoneVal,0)(\thexoneVal,\nA)
\uput*[90]{\beschriftungswinkel}(\thexoneVal,\nA){\small\nA}
\stepcounter{xoneVal}}
\psforeach{\nB}{\datatwo}{
\stepcounter{xtwoVal}
\stepcounter{xtwoVal}
\psline[linewidth=\balkenbreite,linecolor=dia2](\thextwoVal,0)(\thextwoVal,\nB)
\uput*[90]{\beschriftungswinkel}(\thextwoVal,\nB){\small\nB} }
\psforeach{\nD}{\nameone}{
\stepcounter{yoneVal}
\stepcounter{yoneVal}
\rput[c]{0}(\theyoneVal,-10){\parbox{3cm}{\small\nD}}}
% Legend
\psframe[linecolor=black,fillstyle=solid](4.7,109)(7.05,96)
\psline[linecolor=dia1,linewidth=7pt](4.8,105)(5.1,105)
\uput[0](5.1,105){augmentiert}
\psline[linecolor=dia2,linewidth=7pt](4.8,100)(5.1,100)
\uput[0](5.1,100){nicht augmentiert}
\end{psgraph}
\end{document}


So sieht das Ergebnis derzeit aus.

voss
07-12-2008, 00:17
Entschuldigung, ich hatte den Code vergessen:

[CODE]\psset{llx=-1.6cm,lly=-0.6cm,
yAxisLabel=\ytitel,
yAxisLabelPos={\yTitelPos,c},
xAxisLabel=\xtitel,
xAxisLabelPos={c,\xTitelPos}}
\begin{psgraph}[Dy=\schritt,dy=\yabstandeinheit,Dx=1,dx=1.5\psxuni t,
yticksize=\strichlaenge pt 0pt,


Genau weiß ich hier aber nicht, wo bei 5 Balken die Ticks hin sollen.
Wenn das die einzige Abbildung ist, dann mach einfach
\psforeach{\nA}{1.5,3,4.5}{\psline(\nA,0)(\nA,-0.2)}
und fertig.

Herbert

Dr.Wackelzahn
07-12-2008, 09:43
Hallo,
es sind doch 6 Balken. Schlecht von mir war, dass der letzte einen Wert von 0 hat.
Es werden noch mehr mit noch mehr Balken.
Später sollen auch noch Diagramme mit 3-4 zusammengefassten Balken entstehen.
Daher wäre eine universellere Lösung günstiger.
Vielen Dank!

voss
07-12-2008, 09:50
Hallo,
es sind doch 6 Balken. Schlecht von mir war, dass der letzte einen Wert von 0 hat.
Es werden noch mehr mit noch mehr Balken.
Später sollen auch noch Diagramme mit 3-4 zusammengefassten Balken entstehen.
Daher wäre eine universellere Lösung günstiger.


mit 1.5\psxunit klappte es jedenfalls bei mir.

Herbert

Dr.Wackelzahn
07-12-2008, 10:48
Ja, die Striche schon, aber der Text schaut doch komisch aus.
Kann man den noch irgendwie zentrieren und bei allen drei Beschriftungen die zweite Zeile erzwingen?
Da würde es einheitlicher aussehen.

Ich habe mal ein Bild angehängt wie es jetzt aussieht...

voss
07-12-2008, 12:32
Ja, die Striche schon, aber der Text schaut doch komisch aus.
Kann man den noch irgendwie zentrieren und bei allen drei Beschriftungen die zweite Zeile erzwingen?
Da würde es einheitlicher aussehen.

Ich habe mal ein Bild angehängt wie es jetzt aussieht...

dann amch einfach


\uput[-90](..,..){\tabular{@{} l @{}} Zeile 1\\Teile2\endtabular}

Alternativ \rput, je nachdem, was du nimmst.

Trotzdem würde ich den Text senkrecht setzen.

Herbert