PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz, pgfplots: axis-Umgebung in node



e271
16-10-2011, 17:05
Hi,

ich versuche gerade, eine axis-Umgebung (pgfplots) in einen Node (tikz) zu bekommen. Das Ergebnis ist aber recht seltsam: Das Koordinatensystem wird falsch dargestellt.


\documentclass[]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage[ngerman]{babel}
\usepackage{calc}

\usepackage{lmodern,graphicx}
\usepackage{tikz,pgfplots}

\begin{document}

% Richtig ohne node
\begin{tikzpicture}
\begin{axis}[
every axis/.append style={
line width=1pt,
tick style={line width=0.6pt}},
grid style={line width=.6pt, color=black},
scaled ticks=false,
title={\huge{Ölproduktion der USA}},
xlabel={Zeit in Jahren seit 1920},
ylabel={Förderrate (in 1000 Barrel pro Jahr)},
every axis y label/.style=
{at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel},
grid=major,
ymin=0,
ymax=3750000,
xmin=0,
xmax=90,
font=\large,
x filter/.code={\pgfmathadd{#1}{-1920}},
ytick={500000,1000000,1500000,2000000,2500000,3000 000,3500000},
yticklabels={500\,000,1\,000\,000,1\,500\,000,2\,0 00\,000,2\,500\,000,3\,000\,000,3\,500\,000},
xtick={0,10,20,30,40,50,60,70,80,90}]
\addplot[line width=1mm,smooth,color=red,domain=1920:2020]
{385998060*exp(-0.059*(x-1920))/(1+29.47*exp(-0.059*(x-1920)))^2};
\addplot[very thick,smooth,color=blue]table[]{oel.txt};
\end{axis}
\end{tikzpicture}

% Meine blau hinterlegte Umgebung
\begin{tikzpicture}%
\node[draw=blue!90, fill=blue!10, very thin, text width=\textwidth-10pt,
rectangle, inner sep=5pt, inner ysep=5pt](box)%
{Die ist nur ein Test};%
\end{tikzpicture}%

\newpage
%Falsch dargestelltes Koordinatensystem
\begin{tikzpicture}%
\node[draw=blue!90, fill=blue!10, very thin, text width=\textwidth-10pt,
rectangle, inner sep=5pt, inner ysep=5pt](box)%
{\begin{axis}[
every axis/.append style={
line width=1pt,
tick style={line width=0.6pt}},
grid style={line width=.6pt, color=black},
scaled ticks=false,
title={\huge{Ölproduktion der USA}},
xlabel={Zeit in Jahren seit 1920},
ylabel={Förderrate (in 1000 Barrel pro Jahr)},
every axis y label/.style=
{at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel},
grid=major,
ymin=0,
ymax=3750000,
xmin=0,
xmax=90,
font=\large,
x filter/.code={\pgfmathadd{#1}{-1920}},
ytick={500000,1000000,1500000,2000000,2500000,3000 000,3500000},
yticklabels={500\,000,1\,000\,000,1\,500\,000,2\,0 00\,000,2\,500\,000,3\,000\,000,3\,500\,000},
xtick={0,10,20,30,40,50,60,70,80,90}]
\addplot[line width=1mm,smooth,color=red,domain=1920:2020]
{385998060*exp(-0.059*(x-1920))/(1+29.47*exp(-0.059*(x-1920)))^2};
\addplot[very thick,smooth,color=blue]table[]{oel.txt};
\end{axis}
Die ist nur ein Test
};%
\end{tikzpicture}%


\end{document}

Wie kann ich denn das erstellte Schaubild in diese Node-Umgebung korrekt einbinden?

cu
e271

Feuersaenger
16-10-2011, 17:30
Hi e271,

hier gibt es zwei Dinge, die auf den ersten Blick nicht klar sind und zur Behebung zu tun sind:

1. Innerhalb eines \node body wird das tikzpicture unterbrochen. Deshalb kann man Befehle, die sonst innerhalb eines tikzpicture gueltig sind, nicht direkt verwenden - und dazu gehoert neben \draw, \node etc auch \begin{axis}. Loesung:

\node .... {%
\begin{tikzpicture}
\begin{axis}
...
\end{axis}
\end{tikzpicture}%< -- das prozent nicht vergessen hier! Sonst gibts ein space zuviel
Dies ist nur ein Test
};

2. Innerhalb eines \node body werden alle optionen geerbt, die man fuer den node gesetzt hat. Das ist irgendwie logisch, aber unerwartet ist es dann doch - in dem vorliegenden Fall erbt \begin{axis} die optionen

text width=\textwidth-10pt,inner sep=5pt, inner ysep=5pt

die das Bild gehoerig verhauen.

Loesung: stelle sicher, dass vor \begin{axis} "sinnvolle" werte dieser optionen wiederhergestellt sind (zur not, indem man \tikzset{text width=<...>,inner sep=<...>,...} innerhalb von dem node aufruft). Ich kenne auswendig nicht die defaults fuer diese Optionen, da muesstest Du mal im manual nachforschen.

In meinem Experiment hatte ich einfach die fraglichen Optionen auskommentiert und dann lief es.

Mit liebem Gruss

Christian

e271
16-10-2011, 18:09
@Christian
Vielen Dank für Deine Hilfe.
Zu 1. Super. Das Funktioniert schon mal.
Zu 2. Die "text width"-Einstellung zu Beginn ist nötig, weil die blaue Textbox über die gesamte Breite gehen soll. Wenn ich im Inneren des node z.B. \begin{tikzpicture}[text width=5cm] angebe, wird die Ausgabe des Schaubildes zwar etwas enger, aber immer noch nicht korrekt.
Dasselbe passiert, wenn ich vor \begin{axis} den Befehl \tikzset{text width=10cm,inner sep=0pt,inner ysep=0pt} aufrufe :(

cu
e271

e271
16-10-2011, 18:41
Ich habs!

Die Lösung kam hier aus dem Forum: http://mrunix.de/forums/showthread.php?t=70459

Danke für Deine Hilfe, Christian!