为了避免干扰图表,我想在轴环境中定位 和-2
。但是,使用此代码,不会打印。xticklabel style={anchor=north east},
2
xticklabel 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
是不可能的,只使用最后一个。
2是below left
的简写anchor=north east
,也更易于我快速形象化。 与below right
类似anchor=north west
。