我想画一个图形,中间有一个圆圈,周围有 6 个小圆圈

我想画一个图形,中间有一个圆圈,周围有 6 个小圆圈

我想要绘制如图所示的图形。

\documentclass[journal,comsoc]{IEEEtran}
\usepackage{tikz}
\usetikzlibrary{mindmap}
\usetikzlibrary{positioning}

\begin{document}
\begin{figure}[!ht]
    \centering
    \begin{tikzpicture}[baseline, mindmap, grow cyclic, text width=2.0pt, minimum size=0.1pt, align=flush center, every node/.style=concept, concept color=blue!20!white,opacity=0.90,
        level 1/.append style={level distance=2.5cm,sibling angle=60},
            ]
        \node[concept,ball color=blue!20!white,opacity=0.90, minimum size=3.5em, text width=5em ]{\textbf{Features}}
             child  {node [text width=3.8em, circle,ball color=blue!30, minimum size=3.0em]{K}}
            child  {node [text width=3.8em, circle,ball color=blue!30, minimum size=3.0em]{A}}
                    child  {node [text width=3.9em, circle,ball color=blue!30, minimum size=3.0em]{P}}
                     child  {node [text width=3.8em, circle,ball color=blue!30, minimum size=3.0em]{Z}}
                    child  {node [text width=3.8em, circle,ball color=blue!30, minimum size=3.0em]{MM}}
                   child  {node [text width=3.8em, circle,ball color=blue!30, minimum size=3.0em]{Q}
             };
    \end{tikzpicture}
         \caption{Features.} \label{fig:features}
        \end{figure}

\end{document}

我想知道如何用箭头代替连接线,如图所示

答案1

编辑: 直接在文档中使用纯包绘制此(简单)图表tikz并不困难。在此过程中,您需要执行以下操作:

  • 定义节点样式(颜色作为参数,大小和text width多行文本的对齐方式align=center(或者flush center当你不喜欢节点文本的最终连字时)
  • planet定义和satellite节点中心之间的距离
  • 在循环中在 \planet satelite 节点之间绘制satellite和箭头and,这决定了卫星和其中的文本的颜色:
\documentclass[journal,comsoc]{IEEEtran}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usepackage{caption}

\begin{document}
\begin{figure}
    \centering
\begin{tikzpicture}[
   planet/.style = {circle, draw=blue, semithick, fill=blue!30,
                    font=\large\bfseries, 
                    text width=24mm, inner sep=1mm,align=center}, %<---
satellite/.style = {circle, draw=#1, semithick, fill=#1!30,
                    text width=16mm, inner sep=1mm, align=center},%<---
      arr/.style = {-{Triangle[length=3mm,width=6mm]}, color=#1,
                    line width=3mm, shorten <=1mm, shorten >=1mm}
                    ]
% planet
\node (p)   [planet]    {Features};
% satellites and connections
\foreach \i/\j [count=\k] in {red/K, cyan/A, purple/P, teal/Z, orange/lack of resistance, yellow/Q}
{
    \node (s\k) [satellite=\i] at (\k*60:3.4) {\j};
    \draw[arr=\i] (p) -- (s\k);
}
    \end{tikzpicture}
\caption{Cycle of Interaction}
\end{figure}
\end{document}

这使:

在此处输入图片描述

答案的第一个版本:

像这样(重建所显示的图像)吗?

在此处输入图片描述

针对此类图表设计了以下smartdiagram包:

\documentclass{article}
\usepackage{smartdiagram}
\usetikzlibrary{arrows.meta}
\usepackage{caption}

\begin{document}
\begin{figure}
\smartdiagramset{  
    planet font=\large\bfseries,planet text width=28mm,
    satellite font=\normalsize\bfseries, satellite text width=22mm,
    distance planet-satellite=44mm,
/tikz/connection planet satellite/.append style={-{Triangle[length=3mm,width=6mm]},
                                                 line width=3mm},
                }
\centering
\smartdiagram[constellation diagram]%
{
% text in the planet
Chaleneges of Blockchain, 
% texts in satellites  
Privacy,    Authentication,     Bandwidth,          Bootstraping,   
Usability,  Data Malleability,  Wasted Resources,   Scalability%
}
\caption{Cycle of Interaction}
\end{figure}
\end{document}

或者使用六颗卫星,并在您的 MWE 中提供文本:

在此处输入图片描述

\documentclass{article}
\usepackage{smartdiagram}
\usepackage{caption}

\begin{document}
\begin{figure}
\smartdiagramset{
    planet font=\large\bfseries, planet text width=5em, 
    satellite font=\normalsize, 
                }
\centering
\smartdiagram[constellation diagram]%
{
% text in the planet
Features,
% texts in satellites
K, A, P, Z, MM, Q%
}
\caption{Cycle of Interaction}
\end{figure}
\end{document}

附录: 我忽略了使用的文档类...不幸的是,smartdiagram它还不能与IEEEtran文档类一起使用。要解决这种不兼容性,有两种可能性:

  • 使用包绘制上述命题standalone,然后将生成的 pdf 文件导入文档。例如:
\documentclass[tikz, margin=1pt]{standalone}
\usetikzlibrary{arrows.meta}

\begin{document}
\begin{tikzpicture}[
   planet/.style = {circle, draw=blue, semithick, fill=blue!30,
                    font=\large\bfseries, inner sep=2mm},
satellite/.style = {circle, draw=#1, semithick, fill=#1!30, 
                    minimum size=4em, inner sep=2mm},
      arr/.style = {-{Triangle[length=3mm,width=6mm]}, color=#1,
                    line width=3mm, shorten <=1mm, shorten >=1mm}
                    ]
% planet
\node (p)   [planet]    {Features};
% satellites and connections
\foreach \i/\j [count=\k] in {red/K, cyan/A, purple/P, teal/Z, orange/MM, yellow/Q}
{
    \node (s\k) [satellite=\i] at (\k*60:3.2) {\j};
    \draw[arr=\i] (p) -- (s\k);
}
    \end{tikzpicture}
\end{document}

它生成如上面第二个示例所示的图像并将其pdf文件(例如名为 cycle-smartdiagram)插入到您的文档中,如下所示:

\documentclass[journal,comsoc]{IEEEtran}
\usetikzlibrary{arrows.meta}

\begin{document}
\begin{figure}[h!]
    \centering
\includegraphics{cycle-smartdiagram}% or whatever name you select
\caption{Cycle of Interaction}
\label{fig:cycle}
\end{figure}
\end{document}
  • 直接在文档中使用纯包绘制此(简单)图表tikz(请参阅答案顶部的编辑)

答案2

这是一个解决方案。我隐藏了默认的思维导图连接器(使用concept color=none),并使用arrows.meta库创建新的箭头连接器。

更新@Zarko 的箭头与我的类似,但实现起来更简单。我使用了另一个文档中不必要的复杂代码。我将切换到他的箭头,但保留我的答案以使用思维导图显示答案。)

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{mindmap,arrows.meta}

\begin{document}
\begin{tikzpicture}[
    mindmap, every node/.style={concept, ball color=blue!30},
    concept color=none, grow cyclic,
    mindmapArrow/.style={-{Triangle[length=3mm,width=6mm]},
                         color=blue!20!white, line width=3mm,
                         shorten <=2mm, shorten >=2mm},
    root concept/.append style={minimum size=3.5em, text width=5em,
    font=\bfseries},
    level 1/.append style={sibling angle=60, level distance=2.5cm,
      minimum size=3em, text width=2em}]
  \node (root) [root concept] {Features}
    child { node (child1) {K} }
    child { node (child2) {A} }
    child { node (child3) {P} }
    child { node (child4) {Z} }
    child { node (child5) {MM} }
    child { node (child6) {Q} };
  \foreach \child in {1,...,6} {
    \draw[mindmapArrow] (root) -- (child\child);
  }
\end{tikzpicture}
\end{document}

输出

答案3

也许您可以尝试使用基于等的不同(且更简单)的方法\begin{tikzpicture}

例如,如果你使用 Ipe 程序,你可以让你的生活更轻松(http://ipe.otfried.org),它是免费的。然后您可以轻松绘制图表,甚至可以使用 LaTeX 字体和具有不同不透明度的颜色。众所周知,Ipe 导出的 .eps 文件可以包含在您的 .tex 文件中,如下所示

\begin{figure}[h!] 
    \centering
    \includegraphics[scale=0.6]{name.eps}
    \caption{...}
    \label{fig:..}
\end{figure}    

我希望这会有所帮助并提供更简单的解决方案。

以下是一个例子:在此处输入图片描述

相关内容