5

I want to draw Ms Word Converging Radial Diagram like this:

enter image description here

I tried my best and could draw this but I need the code to be flexible so I can decide how many rectangles to have.

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{positioning}
\tikzset{main node/.style={circle,fill=blue!20,draw,minimum size=1cm,inner sep=0pt},
        }
        \def \f {1.0}
        \begin{document}
            \begin{tikzpicture}
                \node[main node] (1) {Center};
                \foreach \a in {0, 30, ..., 180 }
                \draw[main node] ({\f*cos(\a)}, {\f*sin(\a)}) circle (0.2cm);
            \end{tikzpicture}
    \end{document}
8

You can use arrows.meta to make the fat arrows. I also recommend polar coordinates to simplify your code. Also, I would avoid \def\f since \f may be something you want in this or some future document. Instead, I suggest \newcommand{\ff}

enter image description here

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{positioning, arrows.meta}
\tikzset{main node/.style={circle, fill=blue!20,draw,minimum size=1cm,inner sep=0pt}}
\tikzset{outer node/.style={thin, black, rectangle, rounded corners, fill=blue!20,draw}}
\newcommand{\ff}{2cm}

\begin{document}
\begin{tikzpicture}
    \node[main node] (1) {Center};
    \foreach \a/\t in {0/Text 5, 45/Text 4, 90/Text 3, 135/Text 2, 180/Text 1}
    \draw[-{Triangle[width=12pt,length=8pt]}, line width=5pt] (\a:\ff) node[outer node]{\t} to (1);
\end{tikzpicture}
\end{document}

You can set the angles however you want; they don't need to be evenly spaced. You can also change the color of the arrows:

enter image description here

Here are the changes:

\begin{tikzpicture}
    \node[main node] (1) {Center};
    \foreach \a/\t in {0/Text 5, 30/Text 4, 60/Text 3, 130/Text 2, 180/Text 1}
    \draw[green!50!black,-{Triangle[width=12pt,length=8pt]}, line width=5pt] (\a:\ff) node[outer node]{\t} to (1);
\end{tikzpicture}
2
  • I had to add a sixth box. \foreach \a/\t in {0/Text 5, 35/Text 4, 70/Text 3, 110/Text 2, 145/Text 1, 180/Text 1}
    – OOzy Pal
    Sep 8 at 18:36
  • @OOzyPal: that's not a problem. You can add as many (or as few) boxes to the list as you wish. And they don't have to be in order. Try: \foreach \a/\t in {0/Text 5, 30/Text 4, 60/Text 3, 100/Text 2, 180/Text 1, 140/Text 6}. If you increase the value of \ff (or decrease font size) you can fit more.
    – Sandy G
    Sep 8 at 18:39
4

Update

You'll need different text in each node, surely. Then it would be better a \foreach over those texts that counts them.

Something like this:

\documentclass[tikz,border=2mm]{standalone}

\begin{document}
\begin{tikzpicture}
% parameters
\def\outerR{3}   % outer radius
\def\innerR{1.5} % inner radius
\def\mytexts{Text 1,Text 2,Text 4,Text 5,Text 6,Other} % the texts in the nodes
\foreach[count=\xi]\i in \mytexts
  \global\let\ni=\xi % remember the number of texts
% drawing
\node[draw,circle] at (0,0) {Center};
\foreach[count=\xi]\i in \mytexts
{
  \pgfmathsetmacro\a{180/(\ni-1)*(\ni-\xi)} % rotation angle
  \fill[draw,gray, rotate=\a] (\outerR,-0.1)  --++ (\innerR-\outerR,0) --++ (0,-0.1) --++ (-0.2,0.2) --++
                              (0.2, 0.2) --++ (0,-0.1) --++ (\outerR-\innerR,0) -- cycle; 
  \node[draw,fill=white,rounded corners] at (\a:\outerR) {\i};
}
\end{tikzpicture}
\end{document}

enter image description here

Initial solution

This is an option. I have created two parameters: \nr the number of rectangles and \r the radius. You'll have to play with latter as you need because if there are many rectangles or if they are big they will probably overlap one another.

This is my code:

\documentclass[tikz,border=2mm]{standalone}

\begin{document}
\begin{tikzpicture}
% parameters
\def\nr{6}   % number of rectangles
\def\r {2.5} % radius
% drawing
\node[draw,circle] at (0,0) {Center};
\foreach\i in{1,...,\nr}
{
  \pgfmathsetmacro\a{180/(\nr-1)*(\i-1)} % rotation angle
  \fill[draw,gray, rotate=\a] (\r,-0.1) --++ (1-\r,0) --++ (0,-0.1) --++ (-0.2,0.2) --++
                              (0.2,0.2) --++ (0,-0.1) --++ (\r-1,0) -- cycle; 
  \node[draw,fill=white,rounded corners] at (\a:\r) {Text \i};
}
\end{tikzpicture}
\end{document}

And the output:

enter image description here

But if you change the parameters

\def\nr{8} % number of rectangles
\def\r {3} % radius

then

enter image description here

Note: If there are many more rectangles it probably will be necessary to change the arrow width (or length) too.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.