yticklabels 和 ytick 不起作用

yticklabels 和 ytick 不起作用

我正在使用 TikZ 绘制图形,但 yticks 和 yticklabels 设置不正确。

这是我使用的代码:

\documentclass[dvipsnames]{standalone}
\usepackage{pgfplotstable}
\pagestyle{empty}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
    \begin{scope}[shift={(10cm,0cm)}]
\begin{axis}[
       xlabel= some label,
       ylabel= another label,
       grid=both,
       xmin=0,
       xmax=160,
       title = some measurement,
       height=5cm,
       width=8.05cm,
       ytick={0,0.5,1},
       yticklabels={0,0.5,1}]
\addplot [only marks, RoyalBlue] table [y=yy, x=xx ]{some_data.txt};
\addplot [RedOrange] table [y=yy, x=xx ]{more_data.txt};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}

但这是我得到的情节:阴谋

那么为什么标签和刻度不起作用呢?

答案1

总结:

您必须使用设置轴限制才能ymin=0使其0出现,因为 PGFPlots 会自动调整限制,并且它不知道0 应该出现。

稍微冗长的版本(附图片!):

我注意到,新 PGFPlots 用户对基本轴配置普遍感到困惑,所以我会写一些内容以供将来参考。对于有经验的用户来说,这篇文章就像俗话说的“雨过天晴”。

在这里我将讲述与轴有关的所有内容,y因为 OP 的问题是关于这个特定的轴,但它们也都适用于轴x

轴上有三项配置:

  • ymin和的极限ymax
  • 带有滴答声ytick
  • 带有 的刻度标签yticklabels

为了说明这些属性对轴的作用,我将使 OP 的图看起来像这样:

最终的

轴限制为yminymax

首先要设置的是轴的界限,即从哪里到哪里轴会移动。将图表想象成一幅风景画,其界限就是窗口的大小,你会看到地面、天空,或者两者,这只取决于轴的界限。

当您“仅绘制”某些内容时,PGFPlots 会帮您自动获取数据的最大值和最小值,并将其用作轴限值(再加上一点点以使视图更舒适)。

但是,正如 Don Knuth 所说,“计算机理解事物的方式与人类不同”,自动限制可能不是最佳限制。正如 OP 的情况一样,省略了0,但数据非常接近,所以无论如何显示都会很好0

在 PGFPlots 中,轴限值由键ymin和设定ymax。这些值是绘图轴应从哪里到哪里。下图说明了和y值的变化:yminymax

限制

左侧的图表有ymin = 0,而右侧的图表有ymin = 0, ymax = 3.1416。由于我们没有改变图表的大小,所以所有内容都缩小了,以使其符合给定的限制。

轴刻度ytick

但现在出现了一个很大的白色间隙,没有轴标记来帮助数据可视化。我的轴上仅有的标记是00.51,它们在这里是因为原始代码中有ytick={0,0.5,1}

轴刻度表示位置在轴上应该用勾号标记的地方,所以在上图中我的y轴上标记了数据为00.5和 的位置1

现在,假设我想标记数据的零值、平均值和最大值,并且\pi,由于原因,那么我可以使用ytick={0,0.7782,1.0640,3.1416}(假设我已经知道平均值和最大值):

蜱虫

但是“嘿”,你会问,“这是怎么回事?为什么轴上的值是错误的?对应于的第四个标记在哪里\pi?”好吧,吉米,记得我说过刻度是标记的位置1。第一个标记在零点处,第二个标记在0.5和的中间1(与左侧的图表比较),第三个标记在最高蓝点的中心,即最大值。标签(轴左侧的文本)是错误的,因为在原始代码中我们有yticklabels={0,0.5,1},而这正是我们所看到的。我们很快就会看到标签。

sytick必须始终以“数据单位”为单位,这样 PGFPlots 才知道将刻度放在哪里。为了使更大的图更容易,您可以使用例如ytick={0,0.5,...,10}将刻度标记从 0 到 10,步长为 0.5。或者,当然,您可以让 PGFPlots 决定它认为最好的方法。

带有刻度标签yticklabels

最后,唯一需要设置的是刻度标签(不要与轴标签混淆!)。刻度标签是蜱虫发生了什么轴的刻度标签可以是任何东西,而不仅仅是数字。例如,您可以实现高中化学老师的愿望(我们都有这个愿望),并告诉yticklabels={potatoes,bananas,pineapple pizza}他您终于比较了两件不相关的事情。提示:不要这样做。

在我们的示例中,我们可以用 标记轴yticklabels={zero,avg.,max.,$\pi$}。请注意,现在刻度标签有 4 个值,而不仅仅是 3 个。这将完成上一个图中缺少的最后一个标签:

勾选标签

yticklabels接受数据范围,如yticks: yticklabels={0,0.5,...,10}。但是,在这种特定情况下,您可以简单地省略此键,PGFPlots 会将刻度标签设置为等于刻度本身。


我希望这篇文章能帮助您澄清这三个轴设置之间的区别。如果我说漏了嘴,请在评论中告诉我,我会尽量澄清。


1 他花了不少时间按下 Shift 键,玛吉。我想他知道自己在说什么。


最终图表的代码:

\RequirePackage{filecontents}
\begin{filecontents}{some_data_people_should_always_provide_when_posting_a_MWE.txt}
xx    yy
10.0  0.1336
15.0  0.1490
20.0  0.3718
25.0  0.3950
30.0  0.5325
35.0  0.6507
40.0  0.5285
45.0  0.7688
50.0  0.8695
55.0  0.7280
60.0  0.8209
65.0  0.7453
70.0  0.8983
75.0  0.8479
80.0  0.9079
85.0  0.8749
90.0  1.0454
95.0  0.8031
100.0 0.9619
105.0 0.8068
110.0 0.9424
115.0 0.8823
120.0 0.8997
125.0 0.9403
130.0 0.8937
135.0 0.9072
140.0 1.0448
145.0 0.9304
150.0 1.0001
155.0 1.0640
\end{filecontents}
\begin{filecontents}{more_data.txt}
xx yy
10.14705 0.2296
13.52941 0.2939
17.05882 0.3523
21.76470 0.4282
25.88235 0.4866
31.61764 0.5568
36.47058 0.6074
41.76470 0.6580
47.05882 0.7009
53.08823 0.7438
59.11764 0.7828
67.64705 0.8257
77.05882 0.8628
82.79411 0.8823
90.14705 0.9038
99.70588 0.9253
107.9411 0.9390
118.9705 0.9547
126.4705 0.9645
136.1764 0.9724
145.8823 0.9803
154.7058 0.9843
\end{filecontents}
\documentclass[dvipsnames]{standalone}
\usepackage{pgfplotstable}
\pagestyle{empty}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
  \begin{scope}[shift={(10cm,0cm)}]
    \begin{axis}[
           xlabel=some label,
           ylabel=another label,
           grid=both,
           xmin=0,
           xmax=160,
           title=some measurement,
           height=5cm,
           width=8.05cm,
           ymin=0,
           ymax=3.1416,
           ytick={0,0.7782,1.0640,3.1416},
           yticklabels={zero,avg.,max.,$\pi$}]% ← Added this here
    \addplot [only marks, RoyalBlue] table [y=yy, x=xx ]{some_data_people_should_always_provide_when_posting_a_MWE.txt};
    \addplot [RedOrange] table [y=yy, x=xx ]{more_data.txt};
    \end{axis}
  \end{scope}
\end{tikzpicture}
\end{document}

相关内容