PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Number Format in pgfplots



JanMünchen
23-07-2011, 19:07
Hallo Leute,

ich bin gerade dabei meine Dissertation zu schreiben. Hierfür verwende ich TexLive 2010 und für die Diagramme pgfplots. Nun zu meinem Problem. Die ticklabels werden jeweils im Zahlenformat "Wissenschaftlich" ausgegeben. Nun habe ich manchmal nur einen Zahlenbereich von 10 bis 200 oder so. Alle Graphen sollen aber logarithmisch dargestellt werden. Wie kann ich das Zahlenformat so umstellen, das z.B. 0.1, 1, 10, 100 usw. ausgegeben werden? Bitte schickt mir am besten ein Codebeispiel damit ich es auch wirklich verstehe ;)

Hier ein Beispielcode von mir:


\begin{loglogaxis}[name=plot1,
legend style={my legend vierer lo},
grid=major,
scale only axis,
width=\mywidthvierer, height=\myheightvierer,
xmin=\myxminb, xmax=\myxmaxb,
ymin=\verhaeltnisseymin, ymax=\verhaeltnisseymax,
xticklabel=\empty,
scaled y ticks = false,
y tick label style={/pgf/number format/fixed}]

\addplot [% ysi_ti/fe
black,
every mark/.append style={fill=\mytifecolor},
only marks,
mark=diamond*,
mark size=3.0,
error bars/.cd,
x dir=both,x explicit relative,
y dir=both,y explicit relative]
table [x index=11,x error index=12,y index=13,y error index=14] {Daten/ysi_feti50.txt};

\legend{$\frac{\mrm{Ti}^\mrm{+}}{\mrm{Fe}^\mrm{+}} $}
\end{loglogaxis}

Vielen Dank für Eure Hilfe.

Gruß Jan

mechanicus
23-07-2011, 19:15
Bitte schickt mir am besten ein Codebeispiel damit ich es auch wirklich verstehe ;)

Hier solltest du Vorreiter sein. Siehe Signatur MINIMALBEISPIEL. Bitte nutze auch die Code-Umgebung (Raute-Symbol des Editors)

Marco

JanMünchen
23-07-2011, 19:55
Sorry, ich dachte, dass mein Code als Minimalbeispiel ausreicht...

Ich hoffe jetzt ist es vollständig:



\documentclass[ 11pt,
a4paper,
pointlessnumbers,
pagesize,
twoside,
captions=tableheading,
DIV13,
BCOR=10mm
]{scrreprt}
\usepackage{mathpazo}
\usepackage{beramono}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{pgfplots}

\pgfplotsset{my legend vierer lo/.style={ %Style der Legenden der vierer Abbildungen
cells={anchor=center},
at={(-0.0005,1.001)},
anchor=north west,
legend columns=1,
nodes={inner xsep=2mm},
inner xsep=2.5mm
}}

\begin{document}

\begin{tikzpicture}
\begin{loglogaxis}[name=plot1,
legend style={my legend vierer lo},
grid=major,
scale only axis,
width=6.5cm, height=5.0cm,
xmin=2.0025, xmax=40050,
ymin=1e-02, ymax=1e01,
xticklabel=\empty,
scaled y ticks = false,
y tick label style={/pgf/number format/fixed}]

\addplot [% ysi_ti/fe
black,
every mark/.append style={fill=red},
only marks,
mark=diamond*,
mark size=3.0,
error bars/.cd,
x dir=both,x explicit relative,
y dir=both,y explicit relative]
table [x index=11,x error index=12,y index=13,y error index=14] {Daten/ysi_feti50.txt};

\legend{$\frac{\mrm{Ti}^\mrm{+}}{\mrm{Fe}^\mrm{+}} $}
\end{loglogaxis}
\end{tikzpicture}

\end{document}


Danke für Eure Tipps

Gruß Jan

JanMünchen
26-07-2011, 21:56
Hat keiner eine Idee??

Gruß Jan

Feuersaenger
01-08-2011, 09:39
Hi Jan,

Du kannst die Anzeige von den labels manuell kontrollieren - entweder, indem Du von Hand angibst, wie die zu zeichnen sind (mit yticklabels={$0.01$, $\frac{1}{10}$} oder so) oder aber mit

yticklabel=\pgfmathparse{exp(\tick)}\pgfmathprintn umber\pgfmathresult,

Letzteres nimmt '\tick' als (logarithmierten) tick wert, berechnet e^t und stellt das resultat dar. Sollten die resultate zu gross werden, kannst Du

yticklabel={\pgfkeys{/pgf/fpu}\pgfmathparse{exp(\tick)}\pgfmathprintnumber\p gfmathresult},

verwendent, das unterstuetzt hoehere Datenbereiche.

Mit liebem Gruss

Christian

JanMünchen
04-08-2011, 15:57
Hi Christian,

danke für die Tipps. Kann es sein, dass mit diesen Befehlen keine negativen Exponenten verarbeitet werden können? In einer Abbildung möchte ich gerne yticklabels von 0,001 bis 1. Und an dieser Stelle funktioniert es leider nicht. Des Weiteren ergibt sich für 10^2 nicht 100 sondern 100,03. Ich suche gerade nach einem Befehl mit dem man die Anzahl an Kommastellen begrenzen kann. Ich hoffe ich finde den Befehl. Ansonsten würde ich mich auch her über einen Tipp von dir freuen.

Gruß Jan

Feuersaenger
05-08-2011, 16:47
Hi Jan,

fuer negative exponenten duerfte die Genauigkeit auch extrem schnell in die Hose gehen, richtig. Probiere es mal mit dem zweiten Vorschlag, d.h. mit

yticklabel={\pgfkeys{/pgf/fpu}\pgfmathparse{exp(\tick)}\pgfmathprintnumber\p gfmathresult}

damit sollte es klappen.

Die Genauigkeit kannst Du mittels \pgfmathprintnumber[precision=<digits>] angeben (oder global, indem Du

yticklabel style={/pgf/number format/precision=<digits>}

verwendest.

JanMünchen
10-08-2011, 16:54
Hi Christian,

danke für deine Antwort... komme leider erst jetzt dazu es auszuprobieren. Leider klappt das für negative Exponenten immer noch nicht. Hast Du zufällig noch eine Idee was man da machen kann?

Vielen Dank für Deine Hilfe.

Gruß Jan

Feuersaenger
10-08-2011, 19:51
Hi Jan,

bei mir hat das geklappt - allerdings sieht man nicht viel, weil \pgfmathprintnumber im 'std' stil (dem default) die Zahlen auch als 1*10^i oder so darstellt. Probiere mal \pgfmathprintnumber[fixed,precision=4] oder so. Falls Du dann ungenauigkeiten dargestellt bekommst, musst Du evtl. ytick (oder ytickten) nutzen, um die Tick positionen exakt anzugeben.

Wenn Du noch mehr zu den Zahldarstellungsoptionen brauchst, hilft das manual pgfplotstable.pdf sicher weiter.

Viel Erfolg

Mit liebem Gruss

Christian

JanMünchen
11-08-2011, 14:21
Hi Christian.

Ja, so funktioniert es jetzt. Die Genauigkeit macht mir dort an einer Stelle tatsächlich Probleme. Entweder er kann 0,1 oder 0,01 darstellen aber nicht beides gleichzeitig. Eines von beiden wird dann immer zu 0,09994 (oder so...). Bis jetzt habe ich es aber noch nicht geschafft, die Beschriftung komplett manuell zu setzen. Wenn Du da noch einen Tipp hättest wäre ich sehr dankbar.

Ein weiteres Problem mit negativem Exponenten stellt das Minuszeichen dar. In der von mir verwendeten Schriftart wird das Minus im Exponenten viel zu lang gesetzt. Wie kann ich das Minuszeichen nur im Mathemodus für Exponenten verkürzen? Ist das einigermaßen einfach lösbar?

Vielen Dank für Deine Hilfe.

Gruß Jan

Feuersaenger
11-08-2011, 19:36
Hi Jan,

Naja, das mit den ticks geht halt mit 'ytick={0.1,0.01,0.001,0.0001}' oder so. Die sind exakt und werden auch als solche dargestellt. Wenn Du lieber die exponenten angeben willst, kannst Du auch 'ytickten={-1,-2,-3,-4,-5}' machen.

Um das mit dem Minuszeichen zu umgehen wuesste ich jetzt hoechstens, den Number formatting style anzupassen. Dazu muesstest Du mal durch das pgfplotstable manual durchgucken. Irgendwo gibt es auch einen 'sci generic' style, vielleicht hilft der da? Im pgfplots.pdf manual gibt es auch speziell einstellungen fuer logartihmische tick labels. Da muesstest Du Dich vermutlich was einlesen und experimentieren.

Mit liebem Gruss

Christian