"pgfplots" automatisch auf die Textbreite skaliere

Tabellen und Grafiken erstellen und anordnen


monchi
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Fr 21. Dez 2012, 13:24

"pgfplots" automatisch auf die Textbreite skaliere

Beitrag 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}

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2759
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag 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

monchi
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Fr 21. Dez 2012, 13:24

Beitrag 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?

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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

monchi
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Fr 21. Dez 2012, 13:24

Beitrag von monchi »

perfekt! genau so hatte ich mir das vorgestellt.


Vielen herzlichen Dank!

Antworten