pgfplots Figura con larghezza fissa

Sep 03 2020

Come posso creare una figura pgfplots indipendente con dimensioni totali impostate, comprese le etichette degli assi e le voci della legenda?

Se imposto le dimensioni della trama con width=5cm, height=5cm,pgfplots, viene fornita solo una cifra totale approssimativamente di questa dimensione. Inoltre, se una legenda viene posizionata all'esterno della casella dell'asse, le dimensioni della legenda vengono aggiunte alle dimensioni specificate. Il manuale specifica ( 4.10.1 Opzioni di scala comuni ):

Si noti che pgfplots stima solo la dimensione necessaria per le etichette degli assi e delle tacche. La stima presuppone una quantità fissa di spazio per tutto ciò che è al di fuori del riquadro dell'asse. Ciò ha l'effetto che le immagini finali possono essere leggermente più grandi o leggermente più piccole delle dimensioni prescritte.

e inoltre

Se scale only axis = false (impostazione predefinita), pgfplots proverà a produrre la larghezza desiderata incluse etichette, titoli e tick.

Il mio 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}

Di seguito la rappresentazione visiva della soluzione pubblicata da John Kormylo :

Risposte

2 JohnKormylo Sep 03 2020 at 13:45

Sembra orribile, ma si adatta perfettamente a un rettangolo di 5 x 5 cm.

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