Diagrama de bolha/satélite com crianças

Diagrama de bolha/satélite com crianças

Eu tenho o seguinte código com smartdiagramo pacote Latex que produz o diagrama de bolhas anexado.

Mas eu gostaria de poderter satélites infantisnele (veja a imagem do protótipo abaixo).

  • É possível fazer isso com smartdiagram? Se não, como eu poderia replicar isso diretamente com tikzou similar?

Obrigado!

\documentclass[a4paper]{article}
\usepackage{smartdiagram}
\begin{document}

\smartdiagramset{
    bubble center node font = \footnotesize,
    bubble node font = \footnotesize,
    % specifies the minimum size of the bubble center node
    bubble center node size = 0.1cm,
    %  specifies the minimum size of the bubbles
    bubble node size = 0.9cm,
    % specifies which is the distance among the bubble center node and the other bubbles
    distance center/other bubbles = 0.5cm,
    % sets the distance from the text to the border of the bubble center node
    %distance text center bubble = 0.5cm,
}
\smartdiagram[bubble diagram]{
    \normalsize{Interest} \\ \normalsize{Areas},
    \textbf{DLTs/} \\ \textbf{Blockchain,} \\ \textbf{Web3},
    \textbf{Big/Fast Data} \\ \textbf{\& Streaming},    
    \textbf{Artificial} \\ \textbf{Intelligence},
    \textbf{Functional} \\ \textbf{Programming}
}

\end{document}

O que eu tenho versus o que eu quero

O que eu tenho versus o que eu quero

O que eu tentei

Tentei substituir o satélite Functional Programmingpor um novo diagrama, com o objetivo de o satélite se tornar um novo planeta, para poder ter mais satélites (as crianças). Mas o resultado foi uma bagunça. Quero dizer:

\textbf{Functional} \\ \textbf{Programming}para \smartdiagram[bubble diagram]{ ... }

Responder1

Remake da resposta do OP, desta vez sem ajuda do Chat-GPT. O código resultante é mais curto e claro:

\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds,
                calc,
                positioning,}

\begin{document}
    \begin{tikzpicture}[
      base/.style = {circle, draw=white, line width=1.5pt, draw opacity=1,
                     minimum size=#1, align=center, font=\bfseries},
    planet/.style = {base=32mm, fill=orange},
 satellite/.style = {base=13mm, fill=#1, fill opacity=0.7},
  satchild/.style = {base=12mm, fill=green!40, fill opacity=0.7},
                        ]
% Planet
\node (P) [planet] {Interest \\ Areas};
% Satellits
\node   [satellite=blue!30, right=-7mm of P]  {DLTs/\\ Blockchain,\\ Web3};
\node   [satellite=gray!30, above=-7mm of P]  {Big/Fast Data\\ \& Streaming};
\node   [satellite=yellow!30,left=-7mm of P] {Artificial\\ Intelligence};
\node (fp) [satellite=green,below=-7mm of P]  {Functional\\ Programming};
% Satellits children
\node   [satchild, below  left=-4mm and 0mm of fp] {Unison};
\node   [satchild, below right=-4mm and 0mm of fp] {ZIO,\\ Kyo};
\node   [satchild, below=-4mm of fp] {Effect,\\ systems};
    \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Pela dúvida, não está claro se a imagem deve ter fundo preto próprio. Se sim, você pode adicionar antes \end{tikzpicture}das seguintes linhas de código:

% Background, if you like to have it in black
\scoped[on background layer]
    \draw[line width=6mm, fill] (current bounding box.south west) rectangle (current bounding box.north east);

insira a descrição da imagem aqui

Responder2

Finalmente consegui fazer isso com o TikZ com a ajuda do Chat-GPT. Aqui está o resultado e o código para referência:

insira a descrição da imagem aqui

\documentclass[tikz,margin=2mm]{standalone}
\usetikzlibrary{shapes,positioning,calc}
\begin{document}
\begin{tikzpicture}

  % Define styles for the nodes
  \tikzstyle{planet}=[circle, fill=orange, minimum size=3.2cm, align=center]
  \tikzstyle{satellite}=[circle, draw, fill=green!40, minimum size=1.3cm, align=center, opacity=0.7, font=\footnotesize, postaction={draw=white, line width=1.5pt, opacity=1}]
  \tikzstyle{satchild}=[circle, draw, fill=green!25, minimum size=0.7cm, align=center, opacity=0.7, font=\footnotesize, postaction={draw=white, line width=1pt, opacity=1}]

  % Draw the central planet
  \node (interests) [planet] {Interest \\ Areas};

  \node (bigdata) [satellite, above=-0.7cm of interests, fill=gray!30] {\textbf{Big/Fast Data} \\ \textbf{\& Streaming}};
  \node (blockchain) [satellite, right=-0.7cm of interests, fill=blue!30] {\textbf{DLTs/} \\ \textbf{Blockchain,} \\ \textbf{Web3}};
  \node (fp) [satellite, below=-0.7cm of interests] {\textbf{Functional} \\ \textbf{Programming}};
  \node (ai) [satellite, left=-0.7cm of interests, fill=yellow!30] {\textbf{Artificial} \\ \textbf{Intelligence}};

  % Sat. children
  \node (unison) [satchild] at ($(fp) + (205:1.4cm)$) {Unison};
  \node (unison) [satchild] at ($(fp) + (-25:1.4cm)$) {ZIO, Kyo};
  \node (unison) [satchild, below=-4mm of fp] {Effect,\\ systems};

\end{tikzpicture}
\end{document}

Responder3

Apenas para mostrar a quantidade code-noisegerada e deixada por esta abordagem ChatGPT, aqui estão algumas refatoraçõesdo código que o OP postou como solução.

Como você pode ver, o que resta revela some residual nastinessa partir da abordagem escolhida. Ou seja, eu gostaria de refatorar ainda mais, por exemplo, para melhor legibilidade, mas as instruções do nó de alguma forma são boas e ruins ao mesmo tempo que são agora. Ou seja, sem muito mais esforço, é difícil transformar essas declarações em um conjunto de frases simples, fáceis de entender e bem formatadas.

Eu também me pergunto o que aconteceu com left-to-right orientationo esboço original, que se tornou uma orientação de baixo para cima. Isso pode ser mais fácil de mudar agora após a refatoração do que no código GPT postado.

Não me aprofundei nisso, mas me pergunto por que isso postactioné realmente necessário nos estilos SAT e CSAT.

As a rule of thumb:

  • se o código tiver uma aparência feia, pode estar errado ou ser difícil de alterar
  • se o código tiver uma organização organizada, provavelmente será mais correto, caso seja compilado
  • portanto, todas essas são etapas de prevenção de erros, incentivando mudanças à medida que as coisas evoluem.

Aliás, code-noisepor exemplo, baixa capacidade de leitura, é menor quando você trabalha de trás para frente:

  • postar nós etc. primeiro
  • apresentar estilo após estilo
  • o código que posto agora é melhor, mas ainda não é bom o suficiente dessa perspectiva.
\documentclass[tikz,margin=2mm]{standalone}
\usetikzlibrary{positioning}

% ~~~ REFACTORING ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% --- removed unused node name ---
% --- removed bold font: not needed ----------
% --- replaced style-names for better read-ability & error prevention ----
% --- moved node names after the style statement (my convention) ---
% --- renamed node names: capitalized, shorter -----
% --- removed calc, replaced shift statements --------------
% --- removed shapes: obviously NOT needed ----------
% --- replaced 0.7cm by 7mm - grasp it at 1 glance w.o. thinking ---
% --- refactoring common styles CMN + removed not needed ones ---------
% --- same for opacity --------
% --- some, still insufficient, reformatting of code ---

\begin{document}
\begin{tikzpicture}

  % Define styles for the nodes
  \tikzstyle{CMN}   = [circle, align=center]
  \tikzstyle{OPC}   = [opacity=0.7]
  \tikzstyle{PAOPC} = [draw=white,opacity=1]
  \tikzstyle{PLANET}= [CMN, fill=orange, minimum size=3.2cm]
  \tikzstyle{SAT}   = [CMN, OPC, fill=green!40, minimum size=1.3cm,
                         font=\footnotesize, 
                         postaction={PAOPC, line width=1.5pt}]
  \tikzstyle{CSAT}  = [CMN, OPC, fill=green!25, minimum size=0.7cm,
                         font=\footnotesize, 
                         postaction={PAOPC, line width=1pt}]

  % Draw the central planet
  \node [PLANET]           (IA)      {Interest\\Areas};
  \node [SAT, above=-7mm of IA, 
        fill=gray!30]                {Big/Fast Data\\\& Streaming};
  \node [SAT, right=-7mm of IA, 
        fill=blue!30]                {DLTs/\\Blockchain,\\Web3};  
  \node [SAT, below=-7mm of IA] (FP) {Functional\\Programming};  
  \node [SAT, left=-7mm of IA, 
        fill=yellow!30]              {Artificial\\Intelligence};

  % Sat. children
  \node [CSAT]              at ([shift=(205:1.4cm)] FP) {Unison};
  \node [CSAT]              at ([shift=(-25:1.4cm)] FP) {ZIO, Kyo};
  \node [CSAT, 
         below=-4mm of FP]                      {Effect,\\systems};

\end{tikzpicture}
\end{document}

resultado refatorado

informação relacionada