如何正确缩放 tikzpicture 中的 pgfplot?

如何正确缩放 tikzpicture 中的 pgfplot?

我在 pgfplots 中创建了一个图形,并在 tikzfigure 环境中添加了一些额外的标签。现在我发现我需要重新缩放整个图形。通常可以通过添加来完成此操作,但此处对和的scale=2缩放解释不同。结果相当丑陋,我尝试了几种方法但无法修复它。理想情况下,我希望字体大小在两种环境中都完全不变。pgfplotstikzfigure

以下是 MWE 及其输出:

\documentclass[tikz,12pt]{standalone}

\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.8}
\usetikzlibrary{plotmarks}

\begin{document}

% figure looks fine with:
% \begin{tikzpicture}[scale=1,font=\footnotesize]
% but fonts scale unevenly with:
\begin{tikzpicture}[scale=1.5,font=\footnotesize]

\begin{axis}[name=main plot,
    view={45}{45},
    ymax=0.4,
    xmax=0.16,
    zmax=0.6,
    y dir=reverse,
    xtick={0}, ytick={1}, ztick={1},
    extra z ticks={0.5},
    extra z tick labels={0.5\,K},
       axis lines=center,
    ]
    \addplot3+[blue,fill=blue!40!white, fill opacity=0.5,domain=0:0.233,no markers,samples y=0,samples=50] ({0},{x},{0.419-1.2466E-5*(x+1.30574)^24.19521}) -- (axis cs:0,0,0) -- cycle;            
    %/*
\tikzset{endpoint/.style={circle,draw=black,fill,inner sep=0pt,minimum size=3pt} }
\node[endpoint] at (axis cs:0,0.23,0) [label=below:{(1)}] {};  
    %*/  
\end{axis}

\node at (0.8,1.6) {$H\perp c$};
\node at (4.5,5) {28\%};

\end{tikzpicture} 

\end{document}

在此处输入图片描述

有没有简单的方法可以解决这个问题?

答案1

这是 pgfplots 在 tikzpicture 中对齐数据的方式(不幸的)产物:它使用所谓的“单元格图片”,即包含轴作为图片的节点。该节点被移动以遵守对齐选项。不幸的是,这似乎(transform shape隐式地)使用了该选项。

解决方法是(a)告诉 pgfplots 缩放其轴(且仅缩放其轴)和(b)告诉 tikz 缩放其余部分(且仅缩放其余部分):

在此处输入图片描述

\documentclass[tikz,12pt]{standalone}

\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.8}
\usetikzlibrary{plotmarks}

\begin{document}

% figure looks fine with:
% \begin{tikzpicture}[scale=1,font=\footnotesize]
% but fonts scale unevenly with:
\begin{tikzpicture}[font=\footnotesize]% ----- CF

\begin{axis}[name=main plot,
    scale=1.5, % ----- CF
    view={45}{45},
    ymax=0.4,
    xmax=0.16,
    zmax=0.6,
    y dir=reverse,
    xtick={0}, ytick={1}, ztick={1},
    extra z ticks={0.5},
    extra z tick labels={0.5\,K},
       axis lines=center,
    ]
    \addplot3+[blue,fill=blue!40!white, fill opacity=0.5,domain=0:0.233,no markers,samples y=0,samples=50] ({0},{x},{0.419-1.2466E-5*(x+1.30574)^24.19521}) -- (axis cs:0,0,0) -- cycle;            
    %/*
\tikzset{endpoint/.style={circle,draw=black,fill,inner sep=0pt,minimum size=3pt} }
\node[endpoint] at (axis cs:0,0.23,0) [label=below:{(1)}] {};  
    %*/  
\end{axis}

\begin{scope}[scale=1.5]% ---- CF

\node at (0.8,1.6) {$H\perp c$};
\node at (4.5,5) {28\%};

\end{scope}% ---- CF
\end{tikzpicture} 

\end{document}


\end{document}

毫无疑问,这个解决方案很糟糕。

作为 pgfplots 包的作者,我会考虑改进。

相关内容