轴不连续+放大限制在 pgfplots 中无法正确显示轴

轴不连续+放大限制在 pgfplots 中无法正确显示轴

我需要制作 y 轴不连续性,但我还需要配置enlargelimits=true。问题是轴显示不正确,如下图所示。如果我设置enlargelimits=false,则轴不连续性正确完成,但轴值混乱,如上图所示。我该如何修复我的图表?

在此处输入图片描述

以下是该图片的 MWE:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{caption}
\begin{document}

\begin{figure}[H]
\begin{center}
\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=left,
tick align=outside,
axis y discontinuity=crunch, enlargelimits=false
,xtick=data, xlabel=balbalbala, ymin=60, ylabel={balbal [\%]},xlabel style={yshift=-0.3cm}, clip=false, ymax=100]
\addplot[smooth,mark=*,blue] coordinates {
(1,68.21)
(2,78.14)
(3,73.57)
(4,87.7)
(5,85.47)
(6,87.36)
(7,89.1)
(8,96.1)
(9,95.7)
(10,91.4)
(11,84.9)
(12,79.69)
};
\node[coordinate,pin=above left:{96.1\%}] at (axis cs:8,96.1) {};
\end{axis}
\end{tikzpicture}
\captionsetup{justification=centering}
\caption[asdf]{RBlalalalala}
\label{lalalala}
\vspace{1cm}
\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=left,
tick align=outside,
axis y discontinuity=crunch, enlargelimits=true
,xtick=data, xlabel=blablablabla, ymin=400, ymax=1000, clip=false, ylabel=balbal, xlabel style={yshift=-0.3cm}, ylabel style={yshift=0.3cm}]
\addplot[smooth,color=red,mark=x]
coordinates {
(1,944.89)
(2,822.57)
(3,815.4)
(4,707.97)
(5,597.45)
(6,600.83)
(7,568.89)
(8,526.42)
(9,539.7)
(10,573.76)
(11,694.94)
(12,795.55)
};
\end{axis}
\end{tikzpicture}
\captionsetup{justification=centering}
\caption[balbla]{balbalbalblablablalbalb}
\label{balbaba}
\end{center}
\end{figure}

\end{document}

答案1

看起来,这是不可能的。pgf 手册中所有不连续性的示例都使用了选项\enlargelimits=false。但是,您可以手动执行此操作。\enlargelimits=true将两侧的限制增加 10%,因此只需使用xminxmax指定您需要的内容即可。

一些说明:

  • 如果你离开xtick=data,它看起来会好得多(恕我直言)。

  • 的默认值\enlargelimits=true。但是,当您注释此选项时,结果看起来相同。对我来说这有点像错误,或者我没有看到一些文档……

  • 我建议\end{figure}\begin{figure}\centering在两个图之间插入一个或者使用包subcaption以便将两个图像很好地设置在一张图中float

--

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepackage{siunitx}

\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[%
,axis x line=bottom,
,axis y line=left,
,tick align=outside,
,axis y discontinuity=crunch
,xmin=0
,xmax=13
,ymin=60
,ymax=100
,enlargelimits=false
%,xtick=data % more beautiful perhaps
,xlabel=balbalbala
,ytickmin=70
,ylabel={balbal in \%}
%,xlabel style={yshift=-0.3cm} % just if you really want it. I would leave it away.
,clip=false
]
\addplot[smooth,mark=*,blue] coordinates {%
(1,68.21)
(2,78.14)
(3,73.57)
(4,87.7)
(5,85.47)
(6,87.36)
(7,89.1)
(8,96.1)
(9,95.7)
(10,91.4)
(11,84.9)
(12,79.69)
};
\node[coordinate,pin=above left:{\SI{96.1}{\percent}}] at (axis cs:8,96.1) {};
\end{axis}
\end{tikzpicture}
\caption{RBlalalalala}
\label{lalalala}
%\vspace{1cm} % just if you really want it. I would leave it away.
\begin{tikzpicture}
\begin{axis}[%
,axis x line=bottom,
,axis y line=left,
,tick align=outside,
,axis y discontinuity=crunch
,xmin=0
,xmax=13 %enlargelimits=true
,ymin=400
,ymax=1000
,xtick=data
,xlabel=blablablabla
,ytickmin=500
%,clip=false % not needed here
,ylabel=balbal
%,xlabel style={yshift=-0.3cm} % just if you really want it. I would leave it away.
%,ylabel style={yshift=0.3cm} % just if you really want it. I would leave it away.
]
\addplot[smooth,color=red,mark=x] coordinates {%
(1,944.89)
(2,822.57)
(3,815.4)
(4,707.97)
(5,597.45)
(6,600.83)
(7,568.89)
(8,526.42)
(9,539.7)
(10,573.76)
(11,694.94)
(12,795.55)
};
\end{axis}
\end{tikzpicture}
\caption{balbalbalblablablalbalb}
\label{balbaba}
\end{figure}
\end{document}

在此处输入图片描述

我还纠正了:

  • begin{center}\centering

  • \pgfplotsset{compat=1.10}根据警告中的要求

  • \ymintick以便将第一个刻度设置在粉碎之上。

答案2

您可以通过使用默认值仅放大 y 轴的上限enlarge y limits={upper}。如果这还不够,那么您还可以通过 value 键添加更多,例如,如果我将

enlargelimits=false

enlarge y limits={value=0.5,upper}

我明白了

在此处输入图片描述

相关内容