groupplots:管理刻度数

groupplots:管理刻度数

这个问题已经问过了这里但没有完全回答。我知道​​两种方法,但它们不适用于我的问题:

  1. ytick=data:在我的示例中,一些刻度标签将会重叠。
  2. ytick={1000,...,6000}:当每个图的数据不在同一范围内时,定义明确的刻度将会导致问题。

所以我的想法是这样的:

ytick=NumOfTicks,而NumOfTicks可以是任何整数(例如,ytick=5每个 都会产生 5 个刻度nextgrouplot)。

同样有趣的是(但不适用于我的例子)编写一个允许以下操作的宏:

ytick={tickMin,tickMax,tJump},而tJump可以是任意数字(例如,ytick={0,10000,2.5}将生成从 0 开始到 10000 结束的刻度,每个刻度之间的间距为 2.5)

笔记当您将刻度数的确定留给 LaTeX 时,将groupplot-argument 更改footnotesize为任何其他大小(例如)也会对刻度数产生影响。small

考虑以下 MWE:

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots,pgfplotstable}
\usetikzlibrary{pgfplots.groupplots}

\begin{document}


\begin{tikzpicture}
    \begin{groupplot}[
        group style={
            group name=my plots,
            group size=2 by 2,
            xlabels at=edge bottom,
            ylabels at=edge left,
    vertical sep= 1.5cm,
    horizontal sep= 2cm,
%   every axis y label/.style={at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel}
        },
        footnotesize,%changing footnotesize to small will affect the number of ticks
        width=5cm,
        height=5cm,
        %
        xlabel=xlabel,
        ylabel=very long label
%   ,ytick=data
]
    \nextgroupplot[title=\#1]
        \addplot coordinates{(42, 255) (43, 1584) (44, 1296) (45, 432) (46, 972) (47, 540) (48, 1104) (49, 0)};
    \nextgroupplot[title=\#2]
        \addplot coordinates{(42, 400) (43, 400) (44, 0) (45, 400) (46, 0) (47, 0) (48, 0) (49, 0)};
    \nextgroupplot[title=\#3]
        \addplot coordinates{(42, 1800) (43, 2100) (44, 1800) (45, 900) (46, 2100) (47, 2100) (48, 2100) (49, 0)};
    \nextgroupplot[title=\#4]
        \addplot coordinates{(42, 6800) (43, 2800) (44, 2800) (45, 2800) (46, 2000) (47, 2800) (48, 0) (49, 0)};
    \end{groupplot}
\end{tikzpicture}


\end{document}  

答案1

Pgfplots 有两个参数控制默认刻度的选择:

  1. max space between ticks
  2. try min ticks

第一个参数是主要参数,用于导出刻度数。如果此数字低于try min ticks,则 pgfplots 会增加该数字。

请注意,pgfplots 仅接受特定的刻度位置,具体取决于数据范围。例如,如果数据范围是 [0,1500],它将不会选择 1250 作为刻度位置(太详细)。如果它找不到“合适的”刻度位置,它将放宽参数try min ticks而不是选择任意数字。在您的示例中,这意味着即使我请求了,您也会得到 4 或 5 个刻度try min ticks=5

这里的整体解决方案可能是将其设置max space between ticks为“忽略此参数”意义上的某个非常大的值,并强制 pgfplots 仅尊重该try min ticks参数:

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots,pgfplotstable}
\usetikzlibrary{pgfplots.groupplots}

\begin{document}


\begin{tikzpicture}
\begin{groupplot}[
group style={
    group name=my plots,
    group size=2 by 2,
    xlabels at=edge bottom,
    ylabels at=edge left,
    vertical sep= 1.5cm,
    horizontal sep= 2cm,
    %   every axis y label/.style={at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel}
},
    footnotesize,%changing footnotesize to small will affect the number of ticks
        max space between ticks=1000pt,
        try min ticks=5,
    width=5cm,
    height=5cm,
    %
    xlabel=xlabel,
    ylabel=very long label
    %   ,ytick=data
    ]
    \nextgroupplot[title=\#1]
        \addplot coordinates{(42, 255) (43, 1584) (44, 1296) (45, 432) (46, 972) (47, 540) (48, 1104) (49, 0)};
    \nextgroupplot[title=\#2]
        \addplot coordinates{(42, 400) (43, 400) (44, 0) (45, 400) (46, 0) (47, 0) (48, 0) (49, 0)};
    \nextgroupplot[title=\#3]
        \addplot coordinates{(42, 1800) (43, 2100) (44, 1800) (45, 900) (46, 2100) (47, 2100) (48, 2100) (49, 0)};
    \nextgroupplot[title=\#4]
        \addplot coordinates{(42, 6800) (43, 2800) (44, 2800) (45, 2800) (46, 2000) (47, 2800) (48, 0) (49, 0)};
    \end{groupplot}
\end{tikzpicture}


\end{document}  

在此处输入图片描述

不幸的是,您只能一次为所有轴设置这些参数。也许它们应该可以针对单个轴进行配置。

请注意,footnotesize这些参数也会改变(正如它应该做的那样)。

相关内容