评论

评论

我想绘制一个图来说明各向同性天线的配向图。我想做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似乎也相当不错。

结合opacityHenri 的建议,我们最终得到

在此处输入图片描述

\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}

在此处输入图片描述

相关内容