pgfplots Рисунок с фиксированной шириной

pgfplots Рисунок с фиксированной шириной

Как создать отдельный рисунок pgfplots с заданными общими размерами, включая метки осей и записи легенды?

Если я задаю размеры графика с помощью width=5cm, height=5cm,pgfplots, то получаю только общую цифрупримерноэтот размер. Кроме того, если легенда размещена за пределами поля оси, размеры легенды добавляются к указанным размерам. В руководстве указано (4.10.1 Общие параметры масштабирования):

Обратите внимание, что pgfplots оценивает только размер, необходимый для меток осей и делений. Оценка предполагает фиксированное количество пространства для всего, что находится за пределами поля оси. Это приводит к тому, что окончательные изображения могут быть немного больше или немного меньше предписанных размеров.

и далее

Если scale only axis=false (по умолчанию), pgfplots будетпытатьсядля создания желаемой ширины, включая метки, заголовки и отметки.

Мой МВЭ:

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

Ниже представлено визуальное представление решения, опубликованногоДжон Кормило:

введите описание изображения здесь

решение1

Выглядит ужасно, но точно вписывается в прямоугольник 5 на 5 см.

демо

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

Связанный контент