我在 tikz 中有以下代码来生成 3D 图:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
width=2in,
height=2in,
at={(0.0in,0.0in)},
scale only axis,
xmin=-1,
xmax=1,
tick align=outside,
xlabel={$x$},
ymin=-1,
ymax=1,
ylabel={$y$},
zmin=-1,
zmax=1,
zlabel={$z$},
view={45}{20},
axis background/.style={fill=white}
]
\end{axis}
\end{tikzpicture}%
\end{document}
此代码生成以下图像:
看起来几乎和预期的一样。但是,绘图的刻度标记并不理想……它们应该只指向一个方向(每个刻度标记一个刻度标记)。目前,每个刻度标记都有多个刻度标记。
例如,在坐标 (x,y,z) = (1,1,1) 处,有三个刻度标记,但实际上应该没有刻度标记,因为那里没有数字。在 (x,y,z) = (1,1,-1) 处,也有三个刻度标记,但实际上应该只有一个刻度标记...
我该如何修复该问题以使刻度线看起来“符合预期”?
答案1
嗯,我查看了手册,但找不到任何提示。这个网站上的其他答案也没有给出解决方案。pgfplots
这方面似乎不太灵活。您可以先绘制不带刻度的轴,然后像以下示例一样添加它们。
请注意,这clip=false
是使刻度在绘图外可见所必需的。此外,您必须手动调整刻度数。 :/ 最后,刻度标记与轴重叠……所以,总的来说这不是最好的解决方案。但我把它放在这里,因为我找不到更好的。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
width=2in,
height=2in,
scale only axis,
xmin=-1,
xmax=1,
ymin=-1,
ymax=1,
zmin=-1,
zmax=1,
xlabel={$x$},
ylabel={$y$},
zlabel={$z$},
ticklabel shift=5pt,
tick pos=left,
tick style={draw=none},
view={45}{20},
clip=false,
]
\foreach \x in {0,.5,1} {
\edef\temp{\noexpand\draw[black!25] (xticklabel* cs:\x,0) -- (xticklabel* cs:\x,5pt);}\temp
\edef\temp{\noexpand\draw[black!25] (yticklabel* cs:\x,0) -- (yticklabel* cs:\x,5pt);}\temp
\edef\temp{\noexpand\draw[black!25] (zticklabel* cs:\x,0) -- (zticklabel* cs:\x,5pt);}\temp
}
\end{axis}
\end{tikzpicture}%
\end{document}