刻度标记的不同锚点

刻度标记的不同锚点

为了避免干扰图表,我想在轴环境中定位 和-2。但是,使用此代码,不会打印。xticklabel style={anchor=north east},2xticklabel style={anchor=north west},-2

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles}


\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\begin{document}
\begin{axis}[name=plot1,height=5cm,width=5cm,
    clip=false,
    axis lines=middle,
    xmin=-4,xmax=4,samples=201,
    xlabel=$x$,ylabel=$y$,
    ymin=-3,ymax=8,
    restrict y to domain=-3:8,
    enlargelimits={abs=1},
    axis line style={latex-latex},
    xtick={\empty},ytick={\empty},
    ticklabel style={font=\tiny,fill=white},
    extra x ticks={-2},
    xticklabel style={anchor=north east},
    extra x tick labels={$-2$},
    extra x ticks={2},
    xticklabel style={anchor=north west},
    extra x tick labels={2},
    xlabel style={at={(ticklabel* cs:1)},anchor=north west},
    ylabel style={at={(ticklabel* cs:1)},anchor=south west}
    ]
    \addplot[samples=201,domain=-3:3,blue] {2 * (x - 1)^2 * (x+1)^2 + 1};
  \end{axis}

\end{document}

答案1

请努力使您的示例更加集中。这个示例甚至没有按照您提供的方式进行编译(缺少tikzpicture环境),而且如果没有与当前问题无关的所有额外样式代码,更容易看到(并展示)正在发生的事情。

您的想法是正确的,但对于何时应用样式存在一些困惑。从您提供的代码来看,您似乎希望通过分离不同的刻度来应用不同的样式。但这不是工作原理pgfplots:这些样式在处理选项时存储axis,并在绘制图时应用。这就是为什么您注意到

但是,使用此代码,-2则不会打印。

然后

看来只有这一项anchor=north east被实现了。

在这两种情况下,您都将相同的键设置两次,这意味着在绘图中仅使用最后设置的值。1

我在评论中提到了一个解决方案,我将在这里详细介绍。 John Kormylo 的建议也很好,我经常用它来快速调整一个或几个刻度标签。 我的解决方案是用于extra x ticks需要“特殊处理”的刻度,因为我们可以告诉pgfplots这些额外的刻度应用不同的样式:

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  xtick={-2},
  xticklabel style={below left},
  extra x ticks={2},
  extra x tick style={
    xticklabel style={below right},
  },
]
  \addplot[domain=-3:3,blue] {2 * (x - 1)^2 * (x+1)^2 + 1};
\end{axis}
\end{tikzpicture}
\end{document}

使用这段精简的代码(删除所有与问题无关的额外样式内容),更容易看出发生了什么。首先xtick={-2}在 -2 处给出一个“正常”(非额外)x 刻度标记。然后我们告诉您想要如何使用 来设置“正常”刻度标签pgfplots样式xticklabel style={below left}。2

现在我们可以设置需要特殊处理的刻度。我过去常extra x ticks={2}说我需要在 处添加一个额外的刻度标记x=2。这里我们只有一个,但如果有多个,则需要将整个列表放在这个位置。这种方法的局限性是所有额外的 x 刻度都将应用相同的样式代码。如果您发现自己需要以不同的量调整单个刻度标签,最好使用 John 的方法手动单独调整每个刻度标签。

最后,我使用代码指定了额外的 x 刻度的样式

extra x tick style={
  xticklabel style={below right},
},

请注意,该xticklabel style线几乎与之前相同(仅改变了定位),但现在我们通过将其设置在内部来将该样式的设置限制为仅额外的 x 刻度extra x tick style

上面完整的代码给出了这样的结果:

在此处输入图片描述

如果你想要做额外的样式,这里有一个例子。我的建议是把所有不特定于特定情节的东西都放在一个样式中。然后你

  • 自动保持文档内的一致样式(或者如果您愿意的话,可以进一步保持一致),
  • 撰写文档时不必一遍又一遍地重复自己的想法,并且
  • 在调试或准备本网站问题/答案的示例时可以轻松删除多余的样式代码。

以下是该方法的一个示例。所有通用代码都定义在一个地方,并作为单个选项应用于每个axis环境。然后,每个环境所需的唯一附加选项axis是特定于该特定轴的选项。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\pgfplotsset{myplot/.style={ % define all common style here...
  height=5cm,width=5cm,
  clip=false,
  axis lines=middle,
  enlargelimits={abs=1},
  axis line style={latex-latex},
  xtick={\empty},ytick={\empty},
  ticklabel style={font=\tiny,fill=white},
  xlabel style={at={(ticklabel* cs:1)},anchor=north west},
  ylabel style={at={(ticklabel* cs:1)},anchor=south west},
}}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  myplot, % apply common styling
  %% plot-specific code follows %%
  name=plot1,
  xtick={-2},
  xticklabel style={below left},
  extra x ticks={2},
  extra x tick style={
    xticklabel style={below right},
  },
  xmin=-4,xmax=4,samples=201,
  xlabel=$x$,ylabel=$y$,
  ymin=-3,ymax=8,
  restrict y to domain=-3:8,
]
  \addplot[domain=-3:3,blue] {2 * (x - 1)^2 * (x+1)^2 + 1};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述


1技术上xticklabel style附加现有的风格,但由于两者兼具anchor=north east anchor=north west是不可能的,只使用最后一个。

2below left的简写anchor=north east,也更易于我快速形象化。 与below right类似anchor=north west

相关内容