PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pstricks: Problem mit Balken und Achsenbeschriftung



geek_munich
04-07-2011, 10:41
Hallo,

es geht um eine Pstrick Barchart aus Datei.
Die Balken sollen mit den Werten dynamisch beschriftet werden, klappt für positive Werte, für negative Werte wird aber in den Balken geschrieben.

Das andere Problem ist, dass ich die Textgröße der Achsenbeschriftung der horizontalen Achse nicht über "pshlabel" anpassen konnte.
Kann man hier auch angeben, dass die Achsenbeschriftung unter dem Diagramm erfolgen soll? Oder ist hier eine seperate Tabelle zu erstellen und mit geringen Abstand unter der Grafik auszugeben?

Anbei kleines Beispiel.

Würde mich über Hilfe freuen. Danke.

\begin{filecontents*}{test.csv}
2008,2009,2010,
0,17.084699999999998,0.0001,
0,-0.0001,-2.2115500000000003,
\end{filecontents*}

\begin{pdfdisplay}
\psset{unit=1.15mm,xunit=11.00mm}%
\def\pshlabel#1{\color{mycolor}\textsf{\tiny #1}}
\def\psvlabel#1{\color{mycolor}\textsf{\footnotesi ze #1\,\%}}
\resizebox{\width}{42mm}{
\begin{pspicture}(-0.125,-30)(5,20)%
\psaxes[axesstyle=axes,Ox=2008,Dx=1,Oy=-30,Dy=6,labelFontSize=\footnotesize,labels=all,tic ks=all,showorigin=true,linecolor=gray,tickcolor=gr ay](-0.125,-30)(-0.25,20)%
\multido{\iPosY=-30+5}{11}{\psline[linestyle=solid,linecolor=gray](-0.125,\iPosY)(6,\iPosY)}
\readpsbardata[header=true]{\data}{test.csv}
\newpsbarstyle{isstyle}{dimen=inner,fillstyle=soli d,fillcolor=mycolor,linecolor=mycolor}%
\newpsbarstyle{planstyle}{dimen=inner,fillstyle=so lid,fillcolor=black,linecolor=black}%
\psbarchart[barstyle={isstyle,planstyle},barcolsep=0.2,chartst yle=block]{\data}%

%labeling of the bar(s) within the chart
\def\data{ , 17.08, -2.21, }
\rput(-0.5,0){% %\rput(-0.5,-2.5){%
\newcounter{xVal}
\setcounter{xVal}{0}
\psforeach{\n}{\data}%
{\refstepcounter{xVal}%
\uput[90](\thexVal,\n){\tiny{\n}}%
}}
\end{pspicture}%
}
\end{pdfdisplay}

voss
04-07-2011, 22:32
Die Balken sollen mit den Werten dynamisch beschriftet werden, klappt für positive Werte, für negative Werte wird aber in den Balken geschrieben.

Das andere Problem ist, dass ich die Textgröße der Achsenbeschriftung der horizontalen Achse nicht über "pshlabel" anpassen konnte.
Kann man hier auch angeben, dass die Achsenbeschriftung unter dem Diagramm erfolgen soll? Oder ist hier eine seperate Tabelle zu erstellen und mit geringen Abstand unter der Grafik auszugeben?


beim nächsten Mal sehe ich es mir nur an, wenn du _komplette_ Beispiele lieferst!


\documentclass{scrartcl}

\usepackage{pst-eucl,pst-plot,pst-bar,graphicx}
\usepackage{filecontents}
\begin{filecontents*}{test.csv}
0,17.084699999999998,0.0001,
0,-0.0001,-2.2115500000000003,
\end{filecontents*}

\begin{document}

\psset{yunit=1.15mm,xunit=11.00mm}%
%\resizebox{\width}{42mm}{
\begin{pspicture}(-0.125,-30)(5,18)%
\psaxes[axesstyle=axes,Ox=2008,Oy=-30,Dy=6,
labelFontSize=\footnotesize\sffamily,
showorigin=true,linecolor=gray,
tickcolor=gray,mathLabel=false,
xticksize=0 5.5cm, yticksize=0 5.5cm,
xlabelOffset=0.5](0,-30)(4,18)%
\psaxes[axesstyle=frame,labels=none,ticks=none](0,-30)(5,18)
\readpsbardata[header=false]{\data}{test.csv}%
\newpsbarstyle{isstyle}{dimen=inner,fillstyle=soli d,
fillcolor=blue!20,linecolor=blue!20}%
\newpsbarstyle{planstyle}{dimen=inner,fillstyle=so lid,
fillcolor=black,linecolor=black}%
\psbarchart[barstyle={isstyle,planstyle},
barcolsep=0.1,chartstyle=block]{\data}%
%labeling of the bar(s) within the chart
\def\data{ , 17.08, -2.21, }
\rput(-0.5,0){% %\rput(-0.5,-2.5){%
\newcounter{xVal}
\setcounter{xVal}{0}
\psforeach{\n}{\data}%
{\stepcounter{xVal}%
\uput[90](\thexVal,\n){\tiny{\n}}}}
\end{pspicture}%

\end{document}


Herbert

geek_munich
06-07-2011, 12:02
Hallo Herbert,

Danke für die Hilfe. Sorry, ich habe zwar extra ein einfaches Beispiel erstellt, aber nun weiss ich für die Zukunft, dass es wichtig ist, dies lauffähig zu machen.

Mit der Achsenbeschriftung funktioniert es nun perfekt. Danke.

Jedoch mit der Beschriftung des BarCharts habe ich noch immer ein Problem:
Bei negativen Werten sieht man Beschriftung nicht und die sollte weiter nach unten kommen. \stepcounter statt \refstepcounter hilft nicht.
Ich habe einen Ansatz entwickelt, aber habe noch Probleme damit: yVal ebenfalls festlegen und Wert aus /n in Counter speichern. Jedoch wird bei mir dann der Counter nochmals extra ausgegeben. Und dann würde ich einfach in Abhängigkeit mit \ifthenelse negativen Wert reduzieren.

Hier komplettes Beispiel (mit meinem auskommentierten Ansatz)

Danke für Vorschläge und Lösungsansätze im Voraus.

\documentclass[10pt]{scrartcl}

\usepackage{graphicx}
\usepackage{pdftricks}
\usepackage[geometry]{ifsym}
\usepackage{filecontents}

\begin{document}

\begin{filecontents*}{test.csv}
0,17.084699999999998,0.0001,
0,-0.0001,-2.2115500000000003,
\end{filecontents*}

\begin{pdfdisplay}
\psset{yunit=1.15mm,xunit=11.00mm}%
\resizebox{\width}{42mm}{
\begin{pspicture}(-0.125,-30)(5,26)%
\psaxes[axesstyle=axes,Ox=2008,Oy=-30,Dy=6,
labelFontSize=\footnotesize\sffamily,
labels=all,ticks=x,
showorigin=true,linecolor=gray,
tickcolor=gray,mathLabel=false,
xticksize=0 5.5cm, yticksize=0 5.5cm,
xlabelOffset=0.5](0,-30)(4,18)%
\multido{\iPosY=-30+5}{11}{\psline[linestyle=solid,linecolor=gray](-0.125,\iPosY)(6,\iPosY)}
\readpsbardata[header=false]{\data}{test.csv}
\newpsbarstyle{isstyle}{dimen=inner,fillstyle=soli d,fillcolor=black,linecolor=black}%
\newpsbarstyle{planstyle}{dimen=inner,fillstyle=so lid,fillcolor=black,linecolor=black}%
\psbarchart[barstyle={isstyle,planstyle},barcolsep=0.2,chartst yle=block]{\data}%

%labeling of the bar(s) within the chart
\def\data{ , 17.08, -2.21, }
\rput(-0.5,0){%
\newcounter{xVal}
\setcounter{xVal}{0}
%%%\newcounter{yVal}
\psforeach{\n}{\data}%
{\refstepcounter{xVal}%
%%%\setcounter{yVal}{\n}
%%%\addtocounter{yVal}{-3}
%%\ifthenelse{\theyVal < #0}
% wenn yVal kleiner 0
%%{ \addtocounter{yVal}{-3} }
% sonst
%%{ \addtocounter{yVal}{0} }
%%%\uput[90](\thexVal,\theyVal){\tiny{\n}}%
\uput[90](\thexVal,\n){\tiny{\n}}%
}}
\end{pspicture}%
}
\end{pdfdisplay}


\end{document}

voss
06-07-2011, 13:34
Danke für die Hilfe. Sorry, ich habe zwar extra ein einfaches Beispiel erstellt, aber nun weiss ich für die Zukunft, dass es wichtig ist, dies lauffähig zu machen.


du hast dein Beispiel wieder nicht selbst ausprobiert!


%labeling of the bar(s) within the chart
\def\data{ , 17.08, -2.21, }
\rput(0.5,0){%
\psforeach{\n}{\data}{%
\ifdim\n pt >0pt \uput[90](\psLoopIndex,\n){\tiny\n}
\else \uput[-90](\psLoopIndex,\n){\tiny\n}
\fi
}}

Herbert

geek_munich
06-07-2011, 19:58
Danke. Perfekte Lösung: einfach und funktioniert :-)

Beispiel war ausprobiert und habe mich auch länger damit beschäftigt, bin aber noch nicht ganz tief in LaTeX bzw. PSTricks und habe es nicht geschafft zu lösen.

geek_munich
19-07-2011, 12:17
Hallo Herbert, Hallo zusammen,
ich habe noch bei Dynamik bzw. Erweiterung ein kleines Problem. Verstehe noch nicht alles ganz und mit Buch bzw. Dokumentation bin ich auch nicht ganz weiter gekommen.
Danke für weiteren Tip im Voraus.

A) Dimensionierung:
*Zahlen in der Jahreszahlenskala werden abgeschnitten. Welchen Wert muss ich erhöhen, damit dies nicht der Fall ist?
* Des weiteren gibt es Überschneidung in der Beschriftung. Wie kann ich das am besten vermeiden?
* Welche Werte sind zu ändern, damit Grafik höher wird und Balken schmäler wirken? Mit scalebox und Verzerrung will ich es nicht machen...
B) Werte und Achse sollte als % beschriftet werden. Für die Werte an den Balken hat es geklappt. In \psaxes habe ich nicht gefunden, wie man dies geht und der Befehl \def\psvlabel#1{\color{mycolor}\textsf{\footnotesi ze #1\,\%}} wird ignoriert. Ich habe nur geschafft generell Achse zu beschriften, aber sollte doch einfach möglich sein, bei jedem Wert noch % auszugeben.

Anbei kleines und getestes Beispiel.

VG, geek_munich


\documentclass[10pt]{scrartcl}
\newcommand{\MYPCT}{\%}
\usepackage{graphicx}
\usepackage{pdftricks}
\usepackage[geometry]{ifsym}
\usepackage{filecontents}
\begin{document}

\begin{filecontents*}{test.csv}
0,0,0,24.1607,-4.9669,
0,0,0,-0.0001,-0.0001,
\end{filecontents*}

\begin{pdfdisplay}
\psset{yunit=1.70mm,xunit=13.00mm}%
\resizebox{\width}{42mm}{
\begin{pspicture}(-0.125,-5)(5,35 )% % last figure streches the picture
\psaxes[axesstyle=axes,Ox=2006,Oy=-5,Dy=5,
labelFontSize=\footnotesize\sffamily,
labels=all,ticks=x,
showorigin=true,linecolor=gray,
tickcolor=gray,mathLabel=false,
xticksize=0 5.5cm, yticksize=0 5.5cm,
xlabelOffset=0.5, ylabelOffset=0.0](-0.125,-5)(4,25)[,0][$\%$,90]%
\multido{\iPosY=-5+5}{7}{\psline[linestyle=solid,linecolor=gray](-0.125,\iPosY)(5,\iPosY)}
\readpsbardata[header=false]{\data}{test.csv}
\newpsbarstyle{isstyle}{dimen=inner,fillstyle=soli d,fillcolor=black,linecolor=black}%
\newpsbarstyle{planstyle}{dimen=inner,fillstyle=so lid,fillcolor=black,linecolor=black}%
\psbarchart[barstyle={isstyle,planstyle},barcolsep=0.2,chartst yle=block]{\data}%
%labeling of the bar(s) within the chart
\def\data{ , , , 24.16, -4.97, }
\rput(0.5,0){%
\psforeach{\n}{\data}{%
\ifdim\n pt > 0pt \uput[90](\psLoopIndex,\n){\tiny\n \MYPCT{}} \fi
\ifdim\n pt < 0pt \uput[-90](\psLoopIndex,\n){\tiny\n \MYPCT{}} \fi
}}
\end{pspicture}%
}
\end{pdfdisplay}

\end{document}

voss
19-07-2011, 14:59
Anbei kleines und getestes Beispiel.

\documentclass[10pt]{scrartcl}
\usepackage{graphicx}
\usepackage{pdftricks}
\usepackage[geometry]{ifsym}
\usepackage{filecontents}
\begin{document}
...
\psforeach{\n}{\data}{%
\ifdim\n pt > 0pt \uput[90](\psLoopIndex,\n){\tiny\n \MYPCT{}} \fi
\ifdim\n pt < 0pt \uput[-90](\psLoopIndex,\n){\tiny\n \MYPCT{}} \fi


wenn du das _getestet_ hast, dann erkläre mal, wer die PSTricks-Pakete lädt und wo das Makro \MYPCT definiert ist?

Herbert

geek_munich
19-07-2011, 15:27
ich habe es nochmals in meiner Umgebung laufen lassen. Kann es sein, dass \MYPCT gecasht wurde? Hat bei mir exakt so nochmals funktioniert...

Nach meinem Wissen lade ich über den Befehl "\usepackage{pdftricks}" die PSTricks Palette.

voss
19-07-2011, 17:30
ich habe es nochmals in meiner Umgebung laufen lassen. Kann es sein, dass \MYPCT gecasht wurde? Hat bei mir exakt so nochmals funktioniert...

Nach meinem Wissen lade ich über den Befehl "\usepackage{pdftricks}" die PSTricks Palette.

Befehle können nicht "gecacht" werden und pdftricks lädt kein einziges PSTricks Paket ...

Herbert