Ich habe den folgenden Code mit Latex- smartdiagram
Paket, der das angehängte Blasendiagramm erzeugt.
Aber ich möchte in der Lage seinKindersatelliten habendarin (siehe Prototypbild unten).
- Ist dies mit möglich
smartdiagram
? Wenn nicht, wie kann ich dies direkt mittikz
oder oder Ähnlichem replizieren?
Danke!
\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}
Was ich habe vs. was ich will
Was ich versucht habe
Ich habe versucht, den Satelliten Functional Programming
durch ein neues Diagramm zu ersetzen, mit dem Ziel, dass der Satellit ein neuer Planet wird, damit er mehr Satelliten (die Kinder) haben kann. Aber das Ergebnis war ein Chaos. Ich meine:
\textbf{Functional} \\ \textbf{Programming}
Zu
\smartdiagram[bubble diagram]{ ... }
Antwort1
Neufassung der OP-Antwort, diesmal ohne Verwendung der Hilfe von Chat-GPT. Der resultierende Code ist kürzer und klarer:
\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}
Aus der Frage geht nicht hervor, ob das Bild einen eigenen schwarzen Hintergrund haben soll. Wenn ja, können Sie vorher \end{tikzpicture}
die folgenden Codezeilen hinzufügen:
% 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);
Antwort2
Mithilfe von Chat-GPT habe ich es endlich mit TikZ geschafft. Hier ist das Ergebnis und der Code als Referenz:
\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}
Antwort3
Um die Menge an code-noise
generierten und hinterlassenen Daten zu zeigen, die dieser ChatGPT-Ansatz erzeugt, hier einige Refactoringsdes Codes, den der OP als Lösung gepostet hat.
Wie Sie sehen, ist der Rest some residual nastiness
vom gewählten Ansatz abhängig. Ich würde beispielsweise gerne weiter umgestalten, um die Lesbarkeit zu verbessern, aber die Knotenanweisungen sind irgendwie gleichzeitig gut und schlecht, so wie sie es jetzt sind. Ohne viel mehr Aufwand ist es also schwierig, diese Anweisungen in eine Reihe leicht verständlicher, sauber formatierter Einzeiler zu verwandeln.
Ich frage mich auch, was mit left-to-right orientation
der ursprünglichen Skizze passiert ist, die eine Ausrichtung von unten nach oben hatte. Dies lässt sich nach dem Refactoring möglicherweise einfacher ändern als im geposteten GPT-Code.
Ich habe mich nicht näher damit befasst, frage mich aber, warum es postaction
in den SAT- und CSAT-Stilen wirklich erforderlich ist.
As a rule of thumb
:
- Wenn der Code ein hässliches Erscheinungsbild hat, ist er möglicherweise falsch oder schwer zu ändern
- wenn der Code ordentlich angeordnet ist, ist er wahrscheinlich korrekter, sollte er kompiliert werden
- Dies alles sind Schritte zur Fehlervermeidung und zur Förderung von Änderungen im Laufe der Entwicklung.
Übrigens, code-noise
z. B. die schlechte Lesbarkeit, ist geringer, wenn Sie rückwärts arbeiten:
- Post-Knoten usw. zuerst
- stelle einen Stil nach dem anderen vor
- der Code, den ich jetzt poste, ist besser, aber aus dieser Perspektive immer noch nicht gut genug.
\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}