Seite 1 von 1

"pgfplots" automatisch auf die Textbreite skaliere

Verfasst: Sa 3. Jan 2015, 20:05
von monchi
Hi,

ich habe in meinem Dokument verschiedene Plots. Diese möchte ich möglichst automatisch auf die Textbreite skalieren. Die "original" Schriftgröße soll dabei erhalten bleiben.

Das ganze realisiere ich bis jetzt wie folgt:
\documentclass[10pt,a4paper]{report}
\usepackage{blindtext}
\usepackage{pgfplots}

\begin{document}
	\blindtext
	\begin{figure}[h]%
		\centering
		\begin{tikzpicture}
		\begin{axis}[
			scale only axis, 
			height=6cm,
			width=\textwidth-\widthof{300}-0.1cm,
			yticklabel style={align=right,inner sep=0pt,xshift=-0.1cm},
			%ylabel={Höhe [mm]},
			xlabel={Zeit [s]}
			]
			\addplot[domain=0:1000]{10*x^(1/2)};
		\end{axis}
		\end{tikzpicture}
		\caption{Testbild}
	\end{figure}
	\blindtext
\end{document}
Funktioniert auch alles soweit, bis ich eine Achsenbeschriftung hinzufüge. Diese muss ich bis jetzt noch manuell in der Zeile "width=\textwidth-\widthof{300}-0.1cm," hinzufügen. Gibt es eine einfache Möglichkeit die Breite der Beschriftung automatisch zu ermitteln?

Edit:
Ebenfalls zu Problemen führt es, wenn die Beschriftung der X-Achse "rechts über die Diagrammfläche hinausragt":
\documentclass[10pt,a4paper]{report}
\usepackage{blindtext}
\usepackage{pgfplots}

\begin{document}
	\blindtext
	\begin{figure}[h]%
		\centering
		\begin{tikzpicture}
		\begin{axis}[
			scale only axis, 
			height=6cm,
			width=\textwidth-\widthof{100}-0.1cm,
			yticklabel style={align=right,inner sep=0pt,xshift=-0.1cm},
			%ylabel={Hoehe [mm]},
			xlabel={Zeit [s]}
			]
			\addplot[domain=0:1100]{10*x^(1/2)};
		\end{axis}
		\end{tikzpicture}
		\caption{Testbild}
	\end{figure}
	\blindtext
\end{document}

Verfasst: So 4. Jan 2015, 17:30
von Stefan Kottwitz
Hallo Monchi,

das kannst Du mit dem tikzscale-Paket machen. Das kann TikZ- und pgfplots-Bilder skalieren, ohne die Textgröße zu verändern.

Stefan

Verfasst: So 4. Jan 2015, 18:43
von monchi
Hi Stefan!

Danke für den Hinweis das Paket macht (fast) genau das was wollte.

Mein Latex-Dokument sieht jetzt wie folgt aus:


\documentclass[10pt,a4paper]{report}
\usepackage{blindtext}
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{tikzscale}

\begin{filecontents}{beispiel-diag.tikz}
		\begin{tikzpicture}
			\begin{axis}[
				scale only axis, 
				yticklabel style={align=right,inner sep=0pt,xshift=-0.1cm},
				ylabel={Hoehe [mm]},
				xlabel={Zeit [s]}
				]
				\addplot[domain=0:1100]{10*x^(1/2)};
			\end{axis}
		\end{tikzpicture}
\end{filecontents}

\begin{document}
	\blindtext
	\begin{figure}[h]%
		\centering
		\includegraphics[width=\textwidth,height=7cm]{beispiel-diag.tikz}
		\caption{Testbild}
	\end{figure}
	\blindtext
\end{document}
Das Diagramm wird wie gewünscht skaliert. Die Beschriftung der Achse ist aber nicht 100%ig bündig mit dem Fließtext. Ich vermute das die \tikzpicture Umgebung einen kleinen schmalen weißen Rand erzeugt.
Manuell kann ich den mit "trim" entfernen. Gibt es da evtl. noch eine etwas elegantere Lösung?

Verfasst: So 4. Jan 2015, 19:37
von esdd
Da ist noch der innere Abstand in den Noden der Beschriftung. Versuche es mit
xticklabel style={inner xsep=0pt},
ylabel style={inner ysep=0pt},
Gruß
Elke

Verfasst: So 4. Jan 2015, 20:59
von monchi
perfekt! genau so hatte ich mir das vorgestellt.


Vielen herzlichen Dank!