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

LaTeX TikZ双圆相交节点布局、标注及着色遮挡问题求助

在TikZ中实现节点位于相交圆内并标注区域(解决遮挡问题)

我来帮你搞定这个TikZ社交图的问题!你之前遇到的节点被圆遮挡的问题,核心是绘制顺序搞反了——得先画圆和填充交集,再画节点和连线,这样节点才会显示在最上层。下面一步步给你解决所有需求:

1. 先处理圆和交集着色(避免遮挡节点)

把圆的绘制和交集填充放在最前面,用独立的scope来做剪裁,这样不会影响后续的节点和连线。具体做法是:

  • 先定义两个圆的圆心和半径(你之前用的是(2,0.7)和(7,0.7),半径4cm,这个参数可以根据需要调整)
  • 用剪裁功能,先剪第一个圆,然后填充第二个圆的区域,这样就得到两个圆的交集灰色填充

2. 确保中间节点落在交集区域

你现在的中间节点(F、D、K、M)坐标是(5,2)、(4,1)、(5,0)、(4,-1),刚好在两个圆的交集里(两个圆心距离5cm,半径都是4cm,交集区域刚好覆盖这个坐标范围),这个位置没问题,不用调整坐标。

3. 标注三个区域

用普通的\node在合适的位置添加标签,比如左圆标注在左侧空白处,右圆在右侧,交集在中间上方,为了避免遮挡节点,可以给标签加个白色背景。

完整代码

\begin{tikzpicture}
% 第一步:先画圆和交集着色,避免遮挡节点
\begin{scope}
    % 定义两个圆的参数
    \def\leftCircleCenter{(2,0.7)}
    \def\rightCircleCenter{(7,0.7)}
    \def\circleRadius{4cm}
    
    % 绘制左圆(轮廓)
    \draw[blue, thick] \leftCircleCenter circle (\circleRadius);
    % 绘制右圆(轮廓)
    \draw[blue, thick] \rightCircleCenter circle (\circleRadius);
    
    % 填充交集区域
    \begin{scope}
        \clip \leftCircleCenter circle (\circleRadius); % 剪裁左圆范围
        \fill[gray!30] \rightCircleCenter circle (\circleRadius); % 在剪裁范围内填充右圆,得到交集
    \end{scope}
\end{scope}

% 第二步:绘制所有节点(现在节点在圆的上层)
\begin{scope}[every node/.style={circle,thick,draw,fill=white}] % 给节点加白色填充,避免被灰色交集覆盖
    \node (A) at (0,0) {A};
    \node (B) at (0,3) {B};
    \node (C) at (2,3) {C};
    \node (E) at (1,-1.5) {E};
    \node (G) at (1,1.5) {G};

    \node (F) at (5,2) {F} ;
    \node (D) at (4,1) {D};
    \node (K) at (5,0) {K};
    \node (M) at (4,-1) {M};

    \node (H) at (8.5,0) {H};
    \node (I) at (9,2.5) {I};
    \node (J) at (8,1.5) {J};
    \node (N) at (7.5,-1.5) {N};
    \node (L) at (7,3) {L} ;
    \node (Q) at (9.5,1) {Q} ;
\end{scope}

% 第三步:绘制所有边
\begin{scope}[>={Stealth[black]},
    every node/.style={fill=white,circle},
    every edge/.style={draw=red,very thick}]
    \draw (A) -> (G);
    \draw (B) -- (A);
    \draw (B) -- (C);
    \draw (B) -- (G);
    \draw (E) -- (G);
    \draw (E) -- (A);
    \draw (G) -- (C);
    \draw (L) -- (I);
    \draw (H) -- (J);
    \draw (Q) -- (H);
    \draw (I) -- (J);
    \draw (N) -- (H);
    \draw (Q) -- (J);

    \draw (A) -> (D);
    \draw (E) -- (M);
    \draw (E) -- (D);
    \draw (G) -- (D);
    \draw (G) -- (F);
    \draw (C) -- (F);
    \draw (C) -- (M);
    \draw (N) -- (K);
    \draw (N) -- (F);
    \draw (N) -- (M);
    \draw (L) -- (F);
    \draw (J) -- (F);
    \draw (H) -- (F);
\end{scope}

% 第四步:标注三个区域
\node[fill=white, font=\bfseries] at (-1, 0.7) {左圆区域};
\node[fill=white, font=\bfseries] at (10, 0.7) {右圆区域};
\node[fill=white, font=\bfseries] at (4.5, 4) {交集区域};

\end{tikzpicture}

关键改进点说明

  • 绘制顺序:先画圆和填充,再画节点和边,彻底解决遮挡问题
  • 节点填充:给节点加fill=white,避免灰色交集区域透出来影响节点可读性
  • 交集填充:用嵌套的scope和clip实现精准的交集着色,不会影响其他元素
  • 区域标注:用带白色背景的节点标注三个区域,避免遮挡图形

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:22:34