pgfplots Abbildung mit fester Breite

Sep 03 2020

Wie kann ich eine eigenständige pgfplots-Figur mit festgelegten Gesamtabmessungen erstellen, einschließlich Achsenbeschriftungen und Legendeneinträgen?

Wenn ich width=5cm, height=5cm,Plotabmessungen mit pgfplots einstelle, erhalte ich nur eine Gesamtzahl von ungefähr dieser Größe. Wenn eine Legende außerhalb des Achsenfelds platziert wird, werden die Legendenabmessungen zu den angegebenen Abmessungen hinzugefügt. Das Handbuch spezifiziert ( 4.10.1 Allgemeine Skalierungsoptionen ):

Bitte beachten Sie, dass pgfplots nur die Größe schätzt, die für Achsen- und Tick-Beschriftungen benötigt wird. Die Schätzung geht von einem festen Platz für alles aus, was sich außerhalb des Achsenkastens befindet. Dies hat zur Folge, dass die endgültigen Bilder geringfügig größer oder geringfügig kleiner als die vorgeschriebenen Abmessungen sein können.

und weiter

Wenn nur Achse skalieren = falsch (Standardeinstellung), versucht pgfplots , die gewünschte Breite einschließlich Beschriftungen, Titeln und Häkchen zu erzeugen.

Mein MWE:

\documentclass[crop]{standalone}

\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}

\begin{axis}[
%Grouping
    scale only axis=false,
    height=,
    width=10cm,
%Domain
    xmin=2000, xmax=2020,
    ymode=log,
%Ticks
    /pgf/number format/1000 sep={},
%Axis Labels
    ylabel= Price \text{[}\$(2020)/kg\text{]},
%Legend
    legend cell align={left},
    legend pos=outer north east,
    legend style={draw=none},
    legend entries={Entry},
]
\addplot[draw=none] coordinates {(2005,10000)};
\end{axis}

\end{tikzpicture}
\end{document}

Unten sehen Sie die visuelle Darstellung der von John Kormylo veröffentlichten Lösung :

Antworten

2 JohnKormylo Sep 03 2020 at 13:45

Es sieht schrecklich aus, passt aber genau in ein 5 x 5 cm großes Rechteck.

\documentclass[crop]{standalone}

\usepackage[utf8]{inputenc}
\usepackage{tikz}% reducndant
\usepackage{pgfplots}

\newsavebox{\temp}

\begin{document}
\savebox{\temp}{\begin{tikzpicture}

\begin{axis}[
%Grouping
    name=border,
    height=5cm,
    width=5cm,
%Domain
    xmin=2000, xmax=2020,
    ymode=log,
%Ticks
    /pgf/number format/1000 sep={},
%Axis Labels
    ylabel= Price \lbrack\$(2020)/kg\rbrack, %Legend legend cell align={left}, legend pos=outer north east, legend style={draw=none}, legend entries={Entry}, ] \addplot[draw=none] coordinates {(2005,10000)}; \end{axis} \end{tikzpicture}}% trial \begin{tikzpicture} \begin{axis}[ %Grouping name=border, height={\dimexpr 10cm-\ht\temp}, width={\dimexpr 10cm-\wd\temp}, %Domain xmin=2000, xmax=2020, ymode=log, %Ticks /pgf/number format/1000 sep={}, %Axis Labels ylabel= Price \lbrack\$(2020)/kg\rbrack,
%Legend
    legend cell align={left},
    legend pos=outer north east,
    legend style={draw=none},
    legend entries={Entry},
]
\addplot[draw=none] coordinates {(2005,10000)};
\end{axis}
\draw[red] (current bounding box.south west) rectangle (current bounding box.north east);
\draw[green] (current bounding box.south west) rectangle ++(5cm,5cm);

\end{tikzpicture}

\end{document}