这个问题已经问过了这里但没有完全回答。我知道两种方法,但它们不适用于我的问题:
ytick=data
:在我的示例中,一些刻度标签将会重叠。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 有两个参数控制默认刻度的选择:
max space between ticks
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
这些参数也会改变(正如它应该做的那样)。