pgfplots und tick scale einstellungen

Tabellen und Grafiken erstellen und anordnen


Mac-Cherony
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Sa 30. Apr 2011, 11:39

pgfplots und tick scale einstellungen

Beitrag von Mac-Cherony »

Hallo allerseits,

ich möchte mit pgf-plots einen Graphen erstellen. ich habe das tickscaling aktiviert um an den Achsen übersichtliche Zahlenwerte zu bekommen. jetzt möchte ich aber die Zehnerpotenz, die aufgrund des tickscaling nicht mehr direkt an der Achse steht ausblenden und sie stattdessen mit zu der Einheit in der Achsenbeschriftung schreiben.

weiß jemand, ob das komfortabel mit pgfplots geht, oder muss ich die ganzen Zehnerpotenzen manuell aus der eingelesenen Textdatei löschen?

Danke schonmal im Voraus & Grüße

Mac-Cherony

PS: ich hoffe, das Problem ist ohne Minimalbeispiel verständlich, sonst müsste ich gerade noch eins basteln und die Zahlenwerte meiner Tabelle von Hand eingeben....

Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 825
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Re: pgfplots und tick scale einstellungen

Beitrag von localghost »

Mac-Cherony hat geschrieben:[…] ich hoffe, das Problem ist ohne Minimalbeispiel verständlich, sonst müsste ich gerade noch eins basteln und die Zahlenwerte meiner Tabelle von Hand eingeben....
Leider nicht. Wie auch. Und einen Datensatz kannst Du ganz bequem hier auf den Server des Forums hochladen.


Thorsten
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: openSUSE 13.1 (Linux 3.11.6), TeX Live 2013, TeXworks 0.5 (r1349)
³ Lernt gerade TeX (und versucht, es zu verstehen).

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hi Mac-Cheroney,

wenn ich es richtig verstanden habe, willst Du das automatische tick scaling aktiviert haben, aber moechtest gerne manuell kontrolliere ueber das *label* (d.h. \cdot 10^e) haben?

Das geht durch anpassung von 'xtick scale label code' . Ein Beispiel, das (hoffentlich) nahe an Deiner Anforderung ist, koennte folgendes sein:
\documentclass{article}

\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
	xmin=0,xmax=1e10,
	ymin=0,ymax=1,
	xtick scale label code/.code={\xdef\xtickscale{#1}},
	xlabel={$x$ [$\cdot 10^{\pgfmathprintnumber\xtickscale}$]},
]
\end{axis}
\end{tikzpicture}
\end{document}
Das 'xtick scale label code' -ding wird normalerweise verwendet, um ein label zu erzeugen. Hier misbrauche ich es, um den Wert zu merken (das \xdef definiert \xtickscale auf den wert). In xlabel={...} kann man den wert verwenden.

Mit liebem Gruss

Christian

Mac-Cherony
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Sa 30. Apr 2011, 11:39

Beitrag von Mac-Cherony »

Hallo Christian,

sorry für meine späte Rückantwort, aber ich kam erst jetzt wieder dazu mich mit diesem Problem zu beschäftigen. Nichts desto trotz, wird es immer mal wieder aktuell :)
Vielen Dank für deine Antwort, exakt so habe ich mir das vorgestellt.

Viele Grüße

Mac-Cherony
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Sa 30. Apr 2011, 11:39

Beitrag von Mac-Cherony »

Hallo allerseits,

und wieder einmal mehr ist dieses Thema aktuell. Hier mein Minimalbeispiel:
\documentclass{article} 

\usepackage{pgfplots}
\pgfplotsset{compat=1.4}

\begin{document} 
\begin{tikzpicture} 
	\begin{axis}[
		   xmin=0,xmax=1e6,
		   ymin=1.5e2,ymax=6.5e3,
		   %ymin=1e2, ymax=8e4,		
		   ytick scale label code/.code={\xdef\ytickscale{#1}}, 
           ylabel={y /$10^{\pgfmathprintnumber\ytickscale}$},
           xtick scale label code/.code={\xdef\xtickscale{#1}}, 
           xlabel={y /$10^{\pgfmathprintnumber\xtickscale}$},
		   ]	
	\end{axis}
\end{tikzpicture}

\begin{tikzpicture} 
	\begin{axis}[
		   xmin=0,xmax=1e6,
		   ymin=1e2, ymax=8e4,		
		   ytick scale label code/.code={\xdef\ytickscale{#1}}, 
           ylabel={y /$10^{\pgfmathprintnumber\ytickscale}$},
           xtick scale label code/.code={\xdef\xtickscale{#1}}, 
           xlabel={y /$10^{\pgfmathprintnumber\xtickscale}$},
		   ]	
	\end{axis}
\end{tikzpicture}

\end{document}
In diesem Beispiel habe ich nur die y-Achsenrange geändert und dennoch ist das erste Diagramm nicht so formatiert, wie ich es mir gewünscht hätte - nämlich so wie im letzteren Diagramm nur halt mit der y-Range aus dem ersten Diagramm. Gibt es hier einen eleganten Kniff?

Danke schonmal und Gruß

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hi Mac-Cherony,

Du hast durch die Aenderung des y - bereichs die Zahlen so klein bekommen, dass pgfplots normalerweise gar kein tick scale label generiert. Darum ist auch der \ytickscale wert nicht definiert (siehe Dein ausgabenlog).

Loesungsmoeglichkeiten sind: (a) blende das komplett aus oder (b) passen die beiden optionen scale ticks below={ exponent } und scale ticks above={ exponent } so an, dass *immer* was skaliert wird.

Mit liebem Gruss

Christian

Mac-Cherony
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Sa 30. Apr 2011, 11:39

Beitrag von Mac-Cherony »

Hi Christian,

vielen Dank für deine Antwort. Da hätte ich mit etwas mehr Geduld beim Nachlesen leider auch selbst draufkommen können....

Nichts desto trotz funktioniert es leider noch nicht so wie ich es gerne hätte.
Ich habe es mit den scale ticks Einstellungen versucht. Allerdings kommt immer der Fehler:
Package pgfkeys Error: I do not know the key '/tikz/scale ticks above' and I
am going to ignore it. Perhaps you misspelled it.
Ich verwende die Version 1.5 von pgfplots und habe zudem gerade nochmal das Paketarchiv geupdated um ganz sicher zu gehen und wirklich 5 mal mit dem pgfplotsmanual verglichen ob ich nicht etwas falsch geschrieben habe....ich bin ratlos...

Hier mein Minimalbeispiel:
\documentclass{article} 

\usepackage{pgfplots} 
\pgfplotsset{compat=1.5}
 
\begin{document} 
\begin{tikzpicture} 
   \begin{axis}[ 
         xmin=0,xmax=1e6, 
         ymin=1.5e2,ymax=6.5e3,  
         scale ticks above=2,      
         ytick scale label code/.code={\xdef\ytickscale{#1}}, 
         ylabel={y /$10^{\pgfmathprintnumber\ytickscale}$}, 
         xtick scale label code/.code={\xdef\xtickscale{#1}}, 
         xlabel={y /$10^{\pgfmathprintnumber\xtickscale}$}, 
         ]   
   \end{axis} 
\end{tikzpicture} 

\end{document} 

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hi Mac-Cherony,

das ist ein bug - in der Dokumentation! Die Optionen heissen

scale ticks above exponent=<exponent>

bzw.

scale ticks below exponent=<exponent>

Sorry... ich habe anhand Deines Bugreports den Fehler in der Dokumentation behoben, danke.

Mit liebem Gruss

Christian

Antworten