我想绘制一个图来说明各向同性天线的配向图。我想做pgfplots
这项工作。我从手册中获取了代码pgfplots
并做了一些更改;但它不能让我满意。
正如我在标题中所说,我希望轴绘制在中心,但我还希望能够看到 (0,0,0) 点。因此,为了能够看到内部,球体表面的不透明度应较低。
此外,代码没有优化,我需要为所有轴指定最小值和最大值才能看到轴的箭头在表面之外。 有没有更好的方法?
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{%
compat=1.8,
compat/show suggested version=false,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
footnotesize,
axis equal,
axis lines=center,
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
xmax=2,xmin=-2,
ymax=2,ymin=-2,
zmax=2,zmin=-2,
xtick=\empty,
ytick=\empty,
ztick=\empty,
]
\addplot3[%
surf,
z buffer=sort,
samples=15,
variable=\u,
variable y=\v,
domain=0:180,
y domain=0:360
]
({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
\end{axis}
\end{tikzpicture}
\end{document}
答案1
利用axis equal
原因维持宽度/高度以及修改轴限值和图像缩放比例。为了保持轴限值并仅修改单位,我们可以说scale uniformly strategy=units only
。我添加了width=10cm
放大球体以与轴描述进行比较(轴描述的不同字体也可能完成这项工作)。添加也可以避免混淆最终版本中要使用height=10cm
哪个参数width
或。height
添加view/h=45
似乎也相当不错。
结合opacity
Henri 的建议,我们最终得到
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
axis equal,
width=10cm,
height=10cm,
axis lines = center,
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$z$},
ticks=none,
enlargelimits=0.3,
view/h=45,
scale uniformly strategy=units only,
]
\addplot3[%
opacity = 0.5,
surf,
z buffer = sort,
samples = 21,
variable = \u,
variable y = \v,
domain = 0:180,
y domain = 0:360,
]
({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
\end{axis}
\end{tikzpicture}
\end{document}
我们还可以将球体的参数化改为屏幕坐标而不是角度,并得到左图(右图与上图相同)
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
axis equal,
width=10cm,
height=10cm,
axis lines = center,
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$z$},
ticks=none,
enlargelimits=0.3,
view/h=45,
scale uniformly strategy=units only,
]
\addplot3[
surf,
opacity = 0.5,
samples=21,
domain=-1:1,y domain=0:2*pi,
z buffer=sort]
({sqrt(1-x^2) * cos(deg(y))},
{sqrt( 1-x^2 ) * sin(deg(y))},
x);
\end{axis}
\end{tikzpicture}
\end{document}
我导致沿 z 轴(但不沿角度)的均匀分布。
答案2
评论
您可以使用键,而不必手动指定限制enlargelimits = <value>
。使用键获取透明度opacity = <value>
。
如果你不关心编译性能,你可以使用替代解决方案,该解决方案的生成方式如下http://www.texample.net/tikz/examples/spherical-polar-pots-with-3dplot/
执行
\documentclass[tikz]{standalone}
\usepackage{tikz-3dplot}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
axis equal,
axis lines = center,
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$z$},
enlargelimits = 0.5,
ticks=none,
]
\addplot3[%
opacity = 0.5,
surf,
z buffer = sort,
samples = 21,
variable = \u,
variable y = \v,
domain = 0:180,
y domain = 0:360,
]
({cos(u)*sin(v)}, {sin(u)*sin(v)}, {cos(v)});
\end{axis}
\end{tikzpicture}
% Alternative solution: http://www.texample.net/tikz/examples/spherical-polar-pots-with-3dplot/
\tdplotsetmaincoords{70}{135}
\begin{tikzpicture}[>=stealth,line join=bevel,tdplot_main_coords,fill opacity=.5]
\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
{1}{black}{\tdplottheta}%
{\draw[color=black,thick,->] (0,0,0) -- (2,0,0) node[anchor=north east]{$x$};}%
{\draw[color=black,thick,->] (0,0,0) -- (0,2,0) node[anchor=north west]{$y$};}%
{\draw[color=black,thick,->] (0,0,0) -- (0,0,2) node[anchor=south]{$z$};}%
\end{tikzpicture}
\end{document}
输出
使用 PSTricks 和pst-solides3d
(只是为了好玩)
使用xelatex
或 使用进行编译latex -> dvips -> ps2pdf
。
\documentclass[pstricks]{standalone}
\usepackage{pst-solides3d}
\begin{document}
\begin{pspicture}(-5,-4)(5,6)
\psSolid[
object=sphere,
r=1,
linecolor=blue,
fillcolor=blue!10,
action=draw*,mode=4,
ngrid=18 18
]
\axesIIID(0,0,0)(2,2,2)
\end{pspicture}
\end{document}