我想将 axis 范围之外但在 \tikzpicture 范围内绘制的图形与 \axis 环境内的图形结合起来。然而,它们似乎处于不同的参考空间中。我提供了一个最小的工作示例:
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{xcolor}
\usepackage{tikz-3dplot}
\usepackage{pgfplots}
\usetikzlibrary{calc,3d,shapes, pgfplots.external}
\begin{document}
\begin{tikzpicture}
\def\R{1}
\fill[ball color=white!10] (0,0) circle (\R); % 3D lighting effect
\begin{axis}[axis lines=none,
samples=50,domain=0:360,y domain=0:90,
xmin=-1.2,xmax=1.2,ymin=-1.2,ymax=1.2,zmin=0,zmax=1.2]
\pgfplotsset{
colormap={blackwhite}{gray(0cm)=(0); gray(1cm)=(1)}
}
\addplot3[surf,opacity=0.6, shader=interp]
({cos(x)*cos(y)}, {sin(x)*cos(y)}, {sin(y)});
\end{axis}
\end{tikzpicture}
\end{document}
由于我没有提到原点和比例,所以两个坐标系应该同步,但它们的原点和比例不同。为什么?
谢谢。
答案1
首先,轴上的坐标系pgfplots
与周围的 完全分开tikzpicture
。请记住,axis
具有默认宽度(240pt),无论范围如何,它都将具有该大小。例如,如果您有两个axis
环境,一个带有xmin=0,xmax=1
,一个带有xmin=0,xmax=10
,它们仍将具有相同的宽度。因此,当打印在纸上时,第一个轴上的 1 个单位长度将比第二个轴上的 10 倍长。
其次,我认为由于混合了 2D 和 3D,这可能会变得复杂。考虑以下图像,其中显示了轴框:
我认为,下面代码中的高度最终“正确”只是运气好而已。在 2D 参考系统中,轴上的单位向量将取决于view
和width
轴的限制,因此如何获得正确的宽度对我来说并不明显。
旧答案(略有修改)
一个axis
将始终拥有自己的坐标系,我不确定为什么你希望它们相同。默认情况下,它的角(默认锚点)axis
位于其中。如果你添加到选项中,然后添加例如,你会看到它位于阴影圆的中心。south west
(0,0)
name=theAx
axis
\fill (theAx.south west) circle[radius=3pt];
如果您希望 的原点axis
位于圆心,请添加anchor=origin
到axis
选项中。要获得大致相同的比例,您需要确保如上所述,缩放更为复杂,对此我并没有很好的解决方案。axis
坐标系中的 1 个单位与坐标系中的 1 个单位(默认情况下为 1 厘米)相同tikzpicture
。我猜,使用您的xmin
和设置xmax
,添加scale only axis,width=2.4cm
将使其大致正确。
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\def\R{1}
\fill[ball color=white!10] (0,0) circle (\R); % 3D lighting effect
\begin{axis}[axis lines=none,name=theAx,anchor=origin,
samples=10,domain=0:360,y domain=0:90,scale only axis,width=2.4cm,
xmin=-1.2,xmax=1.2,ymin=-1.2,ymax=1.2,zmin=0,zmax=1.2]
\pgfplotsset{
colormap={blackwhite}{gray(0cm)=(0); gray(1cm)=(1)}
}
\addplot3[surf,opacity=0.6, shader=interp]
({cos(x)*cos(y)}, {sin(x)*cos(y)}, {sin(y)});
\end{axis}
\draw [red] (theAx.south west) rectangle (theAx.north east);
\end{tikzpicture}
\end{document}