You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pgfplots在3D图形的平面上绘制嵌入的圆形标签?

解决3D网格矩形的贴合式带圈标签问题

你的问题核心出在两点:

  1. 用circle[x={(...)}, y={(...)}]时,没给单位向量,而且向量长度太夸张(比如(0,0,16)),TikZ会用向量的实际长度来缩放椭圆半轴,导致圆形严重变形;
  2. 数字节点没有跟着平面旋转,就算圆贴对了,文字还是歪的。

针对你的三个矩形,逐个调整标签的旋转和参数,下面是修改后的完整代码:

\tikzset{
    label/.style={draw=gray, fill=white, circle, minimum size=0pt, inner sep=2pt, outer sep=0pt, font=\large}
}

\begin{tikzpicture}
    \begin{axis}[
        view = {-18}{30},
        axis lines = center,
        axis on top,
        axis line style = {thick, black},
        xmin=0, xmax=20,
        ymin=0, ymax=20,
        zmin=0, zmax=20,
        ticks=none,
    ]
        % 红色平面(x=6,y-z平面)
        \addplot3[surf, red, opacity=0.7] coordinates {
            (6.0, 6.0, 0.0) (6.0, 20.0, 0.0)
            (6.0, 6.0, 20.0) (6.0, 20.0, 20.0)
        };
        % 绿色平面(y=6,x-z平面)
        \addplot3[mesh, surf, green, opacity=0.7] coordinates {
            (6.0, 6.0, 0.0) (20.0, 6.0, 0.0)
            (6.0, 6.0, 20.0) (20.0, 6.0, 20.0)
        };
        % 黄色平面(x=y,沿z轴延伸)
        \addplot3[surf, yellow, opacity=0.7] coordinates {
            (6.0, 6.0, 0.0) (6.0, 6.0, 20.0)
            (0.0, 0.0, 0.0) (0.0, 0.0, 20.0)
        };

        % 标签1:红色平面(贴合y-z平面)
        \node[label, rotate around y=18, transform shape] at (6,13,10) {$1$};

        % 标签2:绿色平面(贴合x-z平面)
        \node[label, rotate around x=-30, transform shape] at (13,6,10) {$2$};

        % 标签3:黄色平面(贴合x=y平面)
        \node[label, rotate around z=45, rotate around y=18, rotate around x=-30, transform shape] at (3,3,10) {$3$};
    \end{axis}
\end{tikzpicture}

修改说明:

  • 放弃手动画圆+节点的拆分方式,直接用你定义的label样式,配合旋转+transform shape,让整个带圈标签跟着平面旋转,一步到位;
  • 每个标签的旋转参数对应平面方向,匹配你设置的view={-18}{30}视角:
    • 红色平面是x固定的y-z平面,绕y轴旋转18度;
    • 绿色平面是y固定的x-z平面,绕x轴旋转-30度;
    • 黄色平面是x=y的平面,先绕z轴转45度对齐平面,再叠加视角的旋转参数;
  • 所有旋转都加了transform shape,确保节点的圆形边框和文字同步旋转,完美贴合对应平面。

如果坚持要手动画圆(比如需要更精细控制),记得把circle的x/y参数改成单位正交向量,比如绿色平面的圆应该写:

\draw[thick, fill=white] (13,6,10) circle[x={(1,0,0)}, y={(0,0,1)}, x radius=0.5,y radius=0.5];

两个向量都是单位长度,x/y半径设为相同值,就能在x-z平面上画出正圆。

内容的提问来源于stack exchange,提问作者grapher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:13