PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pgfplots logarithmische Saklierung ohne Hochzahlen



rackestro
29-05-2011, 15:06
Hallo zusammen,
weiß jemand zufällig ob es möglich ist in pgfplot die Beschriftung der Achsen ohne Hochzahl darszustellen (z.B. als 1,2,3,...10,20,30...100)?
Denke mal es müsste eine Einstellung in /pgf/number format sein..
hab im manual leider nichts dazu gefunden (konnte nur die Kommastellen der Hochzahl hinter der 10 beeinflussen).
Wenn jemand einen Tipp wäre cool

greetz
Rackus

localghost
29-05-2011, 15:18
Wie soll denn bitte wirkungsvolle Hilfe ohne brauchbare Informationen aussehen? Fertige ein ordentliches Minimalbeispiel (http://minimalbeispiel.de) an.


Thorsten

rackestro
29-05-2011, 15:27
\centering
\pgfplotsset {width=0.7\textwidth}
\begin{tikzpicture}[]
\pgfplotstableread{Bilder_Implementierung/Validierung_DISS/DISS1.txt}
\data
\begin{loglogaxis}[
legend pos=north east,
xmin=1,xmax=10,%ich will diese Grenzen vorgeben, und genau das ist das Prob. da pgf %plot dann anfängt jedem tick eine Zahl zuzuweisen, gut kann es auch aber dann hätte %Abweichungslinie +20%ich eben gerne keine Hochzahlen. Andererseit wäre mir auch %Abweichungslinie +20%geholfen wenn ich alle Ticks hätte (von 1-10) und nur das %Abweichungslinie +20%erste und letzte eine Zahl haben
ymin=1,ymax=10,
]
%Messdaten
\addplot [color=blue,mark = x,only marks,mark size = 4pt] table[x index = 2,y index = 3] from \data;
%Abweichungsmittelinie
\addplot +[domain=1:10][color=black,mark = none,line width=1pt]{x};
%Abweichungslinie +20%
\addplot +[domain=1:10][color=black,mark = none,dotted,line width=1pt]{x*1.2};
%Abweichungslinie -20%
\addplot +[domain=1:10][color=black,mark = none,dotted,line width=1pt]{x*0.8};
\end{loglogaxis}
\end{tikzpicture}

J0Sch
28-10-2011, 08:55
Hallo!

sry dass ich den alten Thread noch mal ausgrabe aber ich habe exakt das selbe Problem.
Die Achsenbeschriftung in meinem doppeltlogarithmischen Diagramm
soll als natürliche Zahle dargestellt werden. Also anstatt von 10^0 <-> 1 ect.

Diagramm als Minimalbeispiel:


\documentclass[11pt, oneside, a4paper]{scrreprt}

\usepackage[left=2cm, right=2cm, top=2cm, bottom=2cm]{geometry}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}


\begin{figure}
\centering
\footnotesize
\begin{tikzpicture}
\begin{loglogaxis}[
title=Geldart Diagramm,
scale only axis,
xmin=10, xmax=3000,
% xtick={10,20,50,100,200,500,1200},
% xticklabel={10,20,50,100,200,500,1200},
ymin=0.1, ymax=10,
% ytick={0.1,0.2,0.5,1,2,5,10},
width={14cm},
height={10cm},
% axis y line*=left,
xlabel={x},
ylabel={y},
legend style={
at={(0.005,0.90)},
anchor=west,
},
grid=major
]

\addplot[red!80!white,domain=17.7735:19.5156] {0.3949*x - 1.286};


\end{loglogaxis}
\end{tikzpicture}
\end{figure}

\end{document}

viele Grüße,
Josch

Feuersaenger
28-10-2011, 17:30
Hi,

da gibt es zwei moeglichkeiten: entweder man gibt dem die tick positionen und tick labels explizit an oder man konfiguriert die tick ausgabe generisch.

Ich denke, Ihr wollt eher das zweite: das geht wie in folgendem Beispiel:



\documentclass{article}

\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
yticklabel={%
\pgfplotsset{/pgf/fpu}% <-- erweiterter zahlenbereich
\pgfmathparse{exp(\tick)}% exponentiere den exponent
\pgfmathprintnumber[fixed]{\pgfmathresult}% formatiere die zahl
},
]

\addplot[red!80!white,domain=1:20] {exp(x)};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}


Man kann statt dem 'fixed' auch 'std' oder 'sci' waehlen. Vielleicht will man auch 'precision=0' noch dran machen, um rundungsfehlern vorzubeugen.

Beachte: die /pgf/number format keys werden ohne obigen code immer auf den exponenten angewandt; da hat man also nicht den gewuenschten effekt...

J0Sch
02-11-2011, 15:43
Hallo Feuersaenger,

perfekt genau so habe ich mir das vorgestellt!
Vielen Dank für die Antwort.

Grüße Josch

chaosman
29-11-2011, 04:23
hallihallo ;)
Vorweg ersteinmal ich habe erst heute damit angefangen mich mit pgfplots zu beschäftigen. Also falls ich in meinem Code grundlegende Fehler mache so bin ich gern bereit Vorschläge anzunehmen. So weit konnte ichs mir immerhin mit Hilfe der pgfplots doku zusammenzubasteln.
Die Antwort in dem Thread hat mir sehr weitergeholfen jedoch würde es mich interessieren ob es auch möglich wäre die y-Achsenbeschriftung auch etwas zu verändern so wie es excel machen würde

ich habe hier einfach mal mein minimalbeispiel


\documentclass[12pt
,a4paper]{scrartcl}
\usepackage{SIunits}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\tikzset{ every pin/.style={fill=yellow!50!white,rectangle,rounded corners=3pt,font=\tiny}, small dot/.style={fill=black,circle,scale=0.3}}
\begin{semilogyaxis}[
xlabel=\text{t[h]},
ylabel=O.D,
xmin=0,
ylabel near ticks,
xlabel near ticks,
xmax=5.5,
minor x tick num=0,
x=2cm,y=2.5cm,
yticklabel={%
\pgfplotsset{/pgf/fpu}% <-- erweiterter zahlenbereich
\pgfmathparse{exp(\tick)}% exponentiere den exponent
\pgfmathprintnumber[std]{\pgfmathresult}% formatiere die zahl
},
legend style={at={(1,1)},xshift=0.2cm,anchor=north west,nodes=right}
]
\draw[line width=2pt,red, dotted] (axis cs:0.5,0) -- (axis cs:0.5,0.1);
\draw[line width=2pt,red, dotted] (axis cs:3,0) -- (axis cs:3,0.1);
\addplot[only marks] coordinates {
(0,0.15)
(0.5,0.189)
(1,0.536)
(1.5,0.852)
(2,1.392)
(2.5,1.665)
(3,1.82)
(3.5,1.935)
(4,2.005)
(4.5,2.235)
(5,2.385)
};
\legend{Gruppe 3}
\node[small dot,pin=0:{Induktionszeitpunkt}] at (axis cs:1.9,1.2) {};
\end{semilogyaxis}
\end{tikzpicture}
\caption{Wachstumskurve Gruppe 3 mit Induktionszeitpunkt und den 3 Phasen des Wachstums: A) Lag-Phase, B) Log-Phase, C) Stationäre Phase}
\end{figure}
\end{document}


das ganze sollte so aussehen wie ich es mit Excel schon gebastelt habe (siehe Anhang)
falls nicht auch egal wäre nur ne Schönheitssache.

Was mir neben dem noch wichtig wäre neben der Beschriftung der y Achse wäre eine Beschriftung meiner 3 Teilbereiche mit beispielsweise A, B und C. Wäre das denn irgendwie möglich? Ich habe leider auch keine Ahnung wie ich das sonst hinbekommen könnte.

über jede Hilfe wäre ich dankbar

Gruß chaos

p.s. hatte den falschen graphen hochgeladen ... der der hochgeladen war war nicht mit einer logarithmierten y achse

chaosman
29-11-2011, 12:44
Die Beschriftung der Teilbereiche habe ich jetzt mit unsichtbaren nodes gelöst. Zwar nicht so schön wie gedacht aber es passt.
Das ganze sieht dann so aus:



\documentclass[12pt
,a4paper]{scrartcl}
\usepackage{SIunits}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\tikzset{ every pin/.style={fill=yellow!50!white,rectangle,rounded corners=3pt,font=\tiny}, small dot/.style={fill=black,circle,scale=0.3}}
\begin{semilogyaxis}[
xlabel=\text{t[h]},
ylabel=O.D,
xmin=0,
ylabel near ticks,
xlabel near ticks,
xmax=5.5,
minor x tick num=0,
minor y tick num =4,
x=2cm,y=2.5cm,
yticklabel={%
\pgfplotsset{/pgf/fpu}% <-- erweiterter zahlenbereich
\pgfmathparse{exp(\tick)}% exponentiere den exponent
\pgfmathprintnumber[std]{\pgfmathresult}% formatiere die zahl
},
legend style={at={(1,1)},xshift=0.2cm,anchor=north west,nodes=right}
]
\draw[line width=2pt,red, dotted] (axis cs:0.5,0) -- (axis cs:0.5,0.1);
\draw[line width=2pt,red, dotted] (axis cs:3,0) -- (axis cs:3,0.1);
\addplot[only marks] coordinates {
(0,0.15)
(0.5,0.189)
(1,0.536)
(1.5,0.852)
(2,1.392)
(2.5,1.665)
(3,1.82)
(3.5,1.935)
(4,2.005)
(4.5,2.235)
(5,2.385)
};

\node[small dot,pin=0:{Induktionszeitpunkt}] at (axis cs:1.4,0.758) {};
\node[pin={[fill=gray!50, rectangle, pin distance=0mm,draw=white, rounded corners=3pt]270:{A}}] at (axis cs:0.3,2.7) {};
\node[pin={[fill=gray!50, rectangle, pin distance=0mm,draw=white, rounded corners=3pt]270:{B}}] at (axis cs:1.75,2.7) {};
\node[pin={[fill=gray!50, rectangle, pin distance=0mm,draw=white, rounded corners=3pt]270:{C}}] at (axis cs:4.25,2.7) {};
\end{semilogyaxis}
\end{tikzpicture}

\caption{Wachstumskurve Gruppe 3 mit Induktionszeitpunkt und den 3 Phasen des Wachstums: A) Lag-Phase, B) Log-Phase, C) Stationäre Phase}
\end{figure}
\end{document}


wäre es denn auch möglich die linienfarbe der pins zu verändern? dieser kleine punkt der da trotz der 0mm linienlänge ist stört mich leider noch ein klein wenig

Feuersaenger
29-11-2011, 23:31
Hi chaosman,

Du brauchst bei nodes nicht den Umweg ueber 'pins' zu gehen - die geschweiften klammern am Ende sind fuer den Inhalt des node.

Du kannst also statt


\node[pin={[fill=gray!50, rectangle, pin distance=0mm,draw=white, rounded corners=3pt]270:{A}}] at (axis cs:0.3,2.7) {};

einfach


\node[fill=gray!50, rectangle, draw=white, rounded corners=3pt] at (axis cs:0.3,2.7) {A};

machen.

Und unsauber ist das nicht unbedingt; hoechstens nervig, weil Du die positionen rausbekommen musst. Vielleicht hilft da das "at (rel axis cs:0.1,0.7)", was soviel heisst wie 10% der x achse, gemessen von links unten, und 70% der y achse, gemessen von links unten. Der Wert ist dann fuer alle Achsen gleich, unabhaengig von der Skalar.

Die Extra-Linien kannst Du z.B. mit 'extra x ticks' machen:


extra x ticks={0.3,0.6},
extra x tick style={grid=major},
extra x tick labels={}, % kann sein, dass man hier mehr klammernpaare braucht

chaosman
30-11-2011, 20:01
sieht super aus :) dankeschön :)

Kann man denn noch was an der log Achse machen? Also die Beschriftung anders festlegen? Falls nicht wäre auch nicht tragisch ;)

Gruß chaos

Feuersaenger
03-12-2011, 15:01
Hallo chaosman,

wenn ich Dich richtig verstehe, moechtest Du die Basis der Ticks aendern, oder?

Probiere es mal mit "log basis y=2" oder so (vgl. manual). Das aendert allerdings auch die Koordinaten (es nimmt tatsaechlich den log duales).

Falls das nix taugt, kannst Du im Prinzip auch 'ytick={0.125,0.25,0.5}' usw angeben,

Mit liebem Gruss

Christian

chaosman
05-12-2011, 03:20
Danke für deine Hilfe :)
ytick hatte ich bereits probiert aber das hatte trotzdem nicht ganz so funktioniert wie ich das vor hatte - naja egal ich lasse das jetzt so ;)
nochmal vielen Dank ;)