选择性地禁用 tikz-figures 中的轴标签而不修改原始文件

选择性地禁用 tikz-figures 中的轴标签而不修改原始文件

在当前项目中,我有以下图形结构(此处使用示例图形): 在此处输入图片描述

该文件是使用两个文件创建的main.tex

\documentclass{article}
\usepackage{standalone}
\usepackage{tikz}
\usepackage{caption}
\usetikzlibrary{external}
\usepackage{pgfplotstable}
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{tikzscale}
\begin{filecontents*}{file1.dat}
    x y
    0 0
    1 1
    2 2
    3 3
    4 4
    5 5
\end{filecontents*}
\usepackage{subcaption}
\tikzexternalize[prefix=tikz-cache/]
\tikzset{external/force remake}
\usetikzlibrary{pgfplots.groupplots}

\pgfplotsset{every axis/.append style={
        label style={font=\footnotesize\bfseries},
        tick label style={font=\footnotesize},
        legend style={font=\footnotesize}
    },
    y axis/.append style={align=center}}
\tikzset{Line Label/.style={font=\footnotesize,scale=2}}
\newcommand{\figurefontsize}{\footnotesize}

\begin{document}
\begin{figure}[htpb]
    \centering
    \hspace*{\fill}%
    \begin{subfigure}[t]{.3\linewidth}
        \includegraphics[width=\linewidth]{sub.tikz}
        \caption{Image I}
    \end{subfigure}\hfill%
    \begin{subfigure}[t]{.3\linewidth}
        \includegraphics[width=\linewidth]{subII.tikz}
        \caption{Image II}
    \end{subfigure}\hfill%
    \begin{subfigure}[t]{.3\linewidth}
        \includegraphics[width=\linewidth]{subIII.tikz}
        \caption{Image III}
    \end{subfigure}\hspace*{\fill}%
\end{figure}
\end{document}

sub[, II, III].tex

\pgfplotstableread{file1.dat}{\tablea}
\begin{tikzpicture} 
    \begin{axis}[
        ymin=0, ymax=30,
        xmin=0, xmax=5,
        xlabel={$x$},
        ylabel={$y$-entry, typically long},
        grid=major,
        legend entries={\(y_1\),\(y_2\),\(y_1+y_2\)},
        legend pos = north west
        ]
        % Select appropriate columns
        \addplot [blue, mark=*] table [x=x,y=y] {\tablea};
    \end{axis}
\end{tikzpicture}

sub.tikzsubII.tikz并且subIII.tikz相同。

由于它们都共用同一个 y 轴,我想从图 b) 和图 c) 中删除 y 轴标签,并增加所有图形的尺寸以减少它们之间的空间,以使用图 a) 的 y 轴作为公共 y 轴。不过,我并不想完全删除图形之间的空白,我仍然希望图形之间留出一点距离。

但是,因为我在不同的地方重复使用这些图形,所以我不想修改图形文件(即 tikz 文件)本身,而是从主文件中启用/禁用不同的设置。

作为选择性禁用 y 标签的初步测试,我将图形环境重写为:

\begin{figure}[htpb]
    \centering
    \hspace*{\fill}%
    \begin{subfigure}[t]{.3\linewidth}
        \includegraphics[width=\linewidth]{sub.tikz}
        \caption{Image I}
    \end{subfigure}\hfill\pgfplotsset{/pgfplots/ylabel=\empty}%
    \begin{subfigure}[t]{.3\linewidth}
        \includegraphics[width=\linewidth]{subII.tikz}
        \caption{Image II}
    \end{subfigure}\hfill%
    \begin{subfigure}[t]{.3\linewidth}
        \includegraphics[width=\linewidth]{subIII.tikz}
        \caption{Image III}
    \end{subfigure}\hspace*{\fill}%
\end{figure}

禁用图 b)和 c)的 y 标签,但此设置未显示任何结果。

有什么更好的方法可以实现我的目标,使图形更紧凑,如上所述,而无需修改原始 tikz 文件?

答案1

\pgfplotsset{/pgfplots/ylabel=\empty}在这里使用不会产生任何效果,因为它将被ylabel={$y$-entry, typically long}添加到axis.tikz 文件中的宏的选项覆盖。

但是,如果您使用 .tikz 文件中未设置的其他选项,例如\pgfplotsset{/pgfplots/ylabel style={opacity=0}},您的方法确实有效。您还可以使用裁剪左轴trim axis left

如果你剪掉左轴,三幅图像的宽度就不再相同,所以你可能需要\includegraphics[width=\linewidth]用类似 的东西来代替\includegraphics[height=4cm]。当然,你还需要调整三幅图像的宽度subfigures

综合所有这些,您将获得以下代码:

\documentclass{article}
\usepackage{tikz}
%\usetikzlibrary{external}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18} 
\usepackage{tikzscale}
\begin{filecontents*}{file1.dat}
    x y
    0 0
    1 1
    2 2
    3 3
    4 4
    5 5
\end{filecontents*}
\usepackage{subcaption}
%\tikzexternalize[prefix=tikz-cache/]
%\tikzset{external/force remake}

\pgfplotsset{every axis/.append style={
        label style={font=\footnotesize\bfseries},
        tick label style={font=\footnotesize},
        legend style={font=\footnotesize}
    },
    y axis/.append style={align=center}}

\begin{document}
\begin{figure}[htpb]
    \centering
    \begin{subfigure}[t]{.35\linewidth}
        \includegraphics[height=4cm]{sub.tikz}
        \caption{Image I}
    \end{subfigure}\hfill%
    \pgfplotsset{trim axis left, /pgfplots/ylabel style={opacity=0}}%
    \begin{subfigure}[t]{.275\linewidth}
        \includegraphics[height=4cm]{subII.tikz}
        \caption{Image II}
    \end{subfigure}\hfill%
    \begin{subfigure}[t]{.275\linewidth}
        \includegraphics[height=4cm]{subIII.tikz}
        \caption{Image III}
    \end{subfigure}%
\end{figure}
\end{document}

我注释掉了外部化部分。但这应该没什么区别。

在此处输入图片描述

相关内容