4

There are many ways to draw a simple flowchart, using packages like tikz. But recently I read a paper and it seems that their complex flowchart is not a picture, but actually generated by latex. Here is what it looks like:

enter image description here

Edit

I really would like to know how to make a chart like this, so I made a concept of a simplified version: enter image description here

According to the existing answers, I tried to draw a figure like the concept on my own with code:

\documentclass{standalone} \usepackage{tikz} \usepackage{xcolor} \begin{document} \begin{tikzpicture} \tikzset{row1/.style={ minimum width=90pt, minimum height=10pt, draw}} \tikzset{row2/.style={ minimum width=90pt, minimum height=100pt, draw}} \tikzset{row3/.style={ minimum width=90pt, minimum height=30pt, draw}} \tikzset{round/.style={circle, draw=black!60, fill=orange!5, thick}} \tikzset{square/.style={rectangle, draw=black!60, fill=blue!5, thick}} \tikzset{arrow/.style={rectangle, draw=red!60, fill=red!5, thick}} \node[row1] (C1_1) {COL1}; \node[row1, anchor=west] at (C1_1.east) (C2_1) {COL2}; \node[row1, anchor=west] at (C2_1.east) (C3_1) {COL3}; \node[row2, anchor=south, below=0] at (C1_1.south) (C1_2) {Some other text}; \node[row2, anchor=south, below=0] at (C2_1.south) (C2_2) {Some other text}; \node[row2, anchor=south, below=0] at (C3_1.south) (C3_2) {Some other text}; \node[row3, anchor=south, below=0] at (C1_2.south) (C1_3) {Some other text}; \node[row3, anchor=south, below=0] at (C2_2.south) (C2_3) {Some other text}; \node[row3, anchor=south, below=0] at (C3_2.south) (C3_3) {Some other text}; \node[square, below = -30] at (C1_2) (SA) {A}; \node[square, below = -30] at (C2_2) (SB) {B}; \node[square, below = -30] at (C3_2) (SC) {C}; \node[square, below = 10] at (C3_2) (SD) {D}; \node[round, below = 10] at (C2_2) (RO) {O}; \draw[->] (SA) -- (SB); \draw[->] (SB) -- (SC); \draw[->] (SA) -- (RO); \draw[->] (SB) -- (RO); \draw[->] (RO) -- (SD); \end{tikzpicture} \end{document} 

Below is how my best-I-can-do figure looks like:

enter image description here

It seems that it still needs a lot of manual adjustments and improvements.

I would like to know how can we write a better latex implementation to draw something similar to my concept or to the original figure I posted. For "better" I mean the ways to make my implementation prettier or maybe the methods to save those manual adjustments needed.

9
  • 4
    @MS-SPO, for sure can be done by use of tikz-pgf ... but OP question is sort of do-this-for-me. So far he not show any of own effort to draw this. Maybe the best solution for him is insert this image by \includegraphics. Commented Dec 1, 2023 at 11:53
  • 1
    I should ask more specific questions. My intention was not "do-this-for-me", I showed no effort because I have no idea where to start: drawing boxes and arrows using Tikz is all I know. I've updated my question. Commented Dec 1, 2023 at 12:35
  • 4
    Dear @TianjianQin , when you see something like this you should keep in mind the complexity is proportional to the effort put in even if you are an expert in either tikz or even more WYSIWYG programs like inkscape, and everything can be integrated without losing the quality of the vectors If you want a similar example you ask for too much effort and it is not a place for that, unless you have something ready to show. Also if you search a little more you will find extremely complicated examples. Commented Dec 1, 2023 at 22:07
  • 2
    @TianjianQin, I'd advise editing our question, adding some simple diagram you did yourself. This is a complex diagram to draw, and learning how to break the problem into small pieces and how to make them work together is an important skill to develop. This question of mine might help with the tikzset command to define the main concepts of your draw. This answer of mine shall help you to learn how to define nodes with figures. Commented Dec 1, 2023 at 23:58
  • 2
    @JLeonV. I've improved my question Commented Dec 4, 2023 at 14:05

3 Answers 3

5

just because of the challenging and unhealthy fun, around 160 lines of code maybe 4 hours, although the sun has already risen, anyway I hope it serves to encourage those who are starting out that everything can be done but it takes time and effort and etc. Write down some of the quick reference pages for code that I don't even remember. When analyzing the file you linked, I tried to decompose it into vectors but it has the peculiarity that it cannot be decomposed in the vector editor, I don't know the reason but since it exists it can be done, something to find out somewhere.

RESULT:

enter image description here

NMWE:

\documentclass[tikz,border=20pt]{standalone} \usepackage{xstring} % To put some dummy. \usepackage{amsmath} % for equations \usetikzlibrary{positioning,backgrounds,ducks,calc,arrows.meta,fit} %CUSTOMIZED PALLETE OF COLORS USING A COLOR PICKER TOOL FOR THIRD PARTIES \definecolor{GREEN}{HTML}{385723} \definecolor{BLUE}{HTML}{2E5496} \definecolor{BLUEB}{HTML}{5B9BD5} \definecolor{BLUEC}{HTML}{4C7DAA} \definecolor{ORANGE}{HTML}{F8CBAD} \definecolor{GREY}{HTML}{D8D8D8} % ALL THE POSTS OBTAINED BY ASKING FOR SOME CONTRETE QUESTION ON THE WEB. %Tikz /.style with two parameters -> https://tex.stackexchange.com/q/21395/154390 %Tikz : node filling with text -> https://tex.stackexchange.com/q/117444/154390 % How can I get bold math symbols? -> https://tex.stackexchange.com/q/595/154390 % Is it possible to generate a set amount of words using lipsum? -> https://tex.stackexchange.com/q/462453/154390 % Bold, italics and underlining -> https://www.overleaf.com/learn/latex/Bold%2C_italics_and_underlining \newcommand{\mystring}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in, pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.} % Using \StrBefore[20]{\mystring}{ } its posible to put some number of words by this command. \def\DUCK{% TO PUT DUCKS IN NODES \begin{tikz} \tikz\shuffleducks\duck[\randomhead,scale=0.3]; \tikz\shuffleducks\duck[\randomhead,scale=0.3,xshift=1cm]; \tikz\shuffleducks\duck[\randomhead,scale=0.3,xshift=-1cm]; \end{tikz} } \def\MUX#1#2{% to no repeat the code of operators \node[circle,draw,inner sep=-0.5pt,minimum height =.5cm,line width=1.5pt,#1] (#2) {}; \draw[line width=1.5pt] (#2.0)--(#2.180)(#2.90)--(#2.-90); } \begin{document} \begin{tikzpicture}[%Environment options BoxH/.store in=\BoxH,BoxH=10mm, % To avoid writin minimum height or width BoxW/.store in=\BoxW,BoxW=10mm, Arrow/.style 2 args= {draw=#1,-{Triangle[angle=120:.5cm 0.3,scale length=0.5*#2,scale width=0.3*#2]},line width=#2*1.2mm}, H/.style 2 args= {draw=#1,rectangle,fill=#1,text=white,font=\sf\footnotesize,text width=#2, align=center},% H: For headers B/.style = {rectangle,text=black,font=\sf\tiny,text width=#1}, % B: for bodies L/.style = {draw=BLUEC,rectangle,text=white,font=\sf\scriptsize,text width=#1,fill=BLUEB,align=center,rounded corners=2pt}, % L: for learneable modules F/.style = {draw=#1,rectangle,fill=#1,minimum height=\BoxH, minimum width=\BoxW, inner sep=0}, % F: for features, all of these are nmonics to write fast and make code shorter. ] % Start drawing the thing. % Heads \node[H={BLUE}{3.7cm}](H1){Positional encodings (PE)}; \node[H={BLUE}{3.7cm},right=1mm of H1](H2) {Structural encodings (SE)}; \node[H={BLUE}{2.7cm},right=1mm of H2](H3) {Graph features}; \node[H={GREEN}{4.5cm},right=1mm of H3](H4) {GPS layers}; %Bodies \node[B=3.9cm,below=1mm of H1, align=justify](PE-1){ {\bfseries Local PE} \StrBefore[20]{\mystring}{ }\\ %inside a node when align is defined use \\ to jump to other line. \[ \lim_{h \rightarrow 0 } \frac{f(x+h)-f(x)}{h} \] {\bfseries Relative PE} \StrBefore[20]{\mystring}{ } }; \node[B=3.9cm,below=9.5cm of H1,align=justify](PE-2){ {\bfseries DeepSet} \StrBefore[20]{\mystring}{ }\\ \\ {\bfseries SignNet} \StrBefore[20]{\mystring}{ } }; %Second column \node[B=3.9cm,below=1mm of H2,align=justify](SE-1){ {\bfseries Local PE} \StrBefore[20]{\mystring}{ }\\ \[ R^*=\sum_{i=1}^n|RX_i-Y_i\|^2_2, \] {\bfseries Batch-norm} \StrBefore[20]{\mystring}{ } }; \node[B=3.9cm,below=9.5cm of H2, align=justify](SE-2){ {\bfseries DeepSet} \StrBefore[20]{\mystring}{ }\\ \\ {\bfseries MLP} \StrBefore[20]{\mystring}{ } }; %third column \node[B=2.9cm,below=1mm of H3, align=justify](GF-1){ {\bfseries Nodes features} \StrBefore[10]{\mystring}{ }\\ \\ {\bfseries Global features} \StrBefore[10]{\mystring}{ }\\ \\ {\bfseries Edge features} \StrBefore[10]{\mystring}{ } }; \node[B=2.9cm,below=9.5cm of H3, align=justify](GF-2){ {\bfseries MPL} \StrBefore[15]{\mystring}{ } }; %fourth column \node[B=4.7cm,below=1mm of H4, align=justify](GF-1){ {\bfseries MPNN layer} \StrBefore[11]{\mystring}{ }\\ {\bfseries Transformer layer} \StrBefore[15]{\mystring}{ }\\ {\bfseries Residual connections} \StrBefore[10]{\mystring}{ }\\ {\bfseries MLP} Some text \underline{underline}.\\ }; %Drawing Another nodes \node[L=1cm,below=3mm of PE-1](MLP){MLP}; \node[F=ORANGE,BoxW=3.5cm, BoxH=8mm, below=3mm of MLP](MLP-1){\DUCK}; \node[F=GREY,BoxW=3.5cm, BoxH=8mm, below=1mm of MLP-1](MLP-2){\DUCK}; \node[F=GREY,BoxW=3.5cm, BoxH=8mm, below=1mm of MLP-2](MLP-3){\DUCK}; \node[F=GREY!50!ORANGE,BoxW=2cm, BoxH=8mm, right=1mm of MLP-1](MLP-4){\DUCK}; \node[L=1cm,right=5mm of MLP-4](MLP2){MLP}; \node[L=1.3cm,below left=5mm and -18mm of MLP-3](BN){batch-norm}; \node[L=1.3cm,below=3mm of BN](MLP3){MLP}; \node[L=1.2cm,right=3mm of MLP3](SN){sign-net}; \node[L=1.2cm,above=0.5mm of SN](DS){deep-set}; \node[B=1.5cm,above=0.1mm of DS,align=center,inner sep=0](Text){any variable input size network}; \MUX{below=3mm of SN}{op-1}; \MUX{on grid,below=-2.5mm of op-1-|MLP2}{op-2}; \MUX{on grid,right=3cm of op-2}{op-3}; \MUX{on grid,right=2cm of op-3}{op-4}; %drawing some Arrows \draw[Arrow={GREY}{1}](MLP-2.180) -- ++(-2mm,0) coordinate (temp) |- (BN.180); \draw[Arrow={GREY}{1}](BN) -- (MLP3); \draw[Arrow={GREY!50!ORANGE}{1}](MLP-4)--(MLP2); \draw[Arrow={GREY}{1}](MLP3) |- (op-1); \draw[Arrow={GREY}{1}](SN) -- (op-1); \draw[Arrow={GREY}{1.2}](op-1) -- (op-2); \draw[Arrow={GREY}{1.3}](op-2) -- (op-3); \draw[Arrow={GREY}{1.4}](op-3) -- (op-4); \draw[Arrow={GREY}{1}](MLP2)--(op-2); \draw[Arrow={ORANGE}{1}](MLP-1)--(MLP); \draw[Arrow={ORANGE}{1}](MLP)-|(op-4); %finishing \node[F=GREY!50!GREEN,BoxW=2.5cm, BoxH=4cm, right=10mm of op-4, align=center](END){\DUCK \\ \DUCK \\ \DUCK \\ \DUCK }; \draw[Arrow={ORANGE}{1}](MLP)-|(op-4); \draw[Arrow={GREY!50!GREEN}{2}](op-4)--(END); %some use of fit \node[draw,BLUEB,line width=1pt,rounded corners,dashed,fit=(SN)(DS)(Text)]{}; \begin{scope}[on background layer]% For the shadows boxes in background. \fill[GREY!15] (H1.south east)++(0,-1mm) rectangle (H1.south west|- PE-2.-90); \fill[GREY!15] (H2.south east)++(0,-1mm) rectangle (H2.south west|- PE-2.-90); \fill[GREY!15] (H3.south east)++(0,-1mm) rectangle (H3.south west|- PE-2.-90); \fill[GREEN!5] (H4.south east)++(0,-1mm) rectangle (H4.south west|- PE-2.-90); \end{scope} \end{tikzpicture} \end{document} 

EXTRA If some manuals seem like a lot of text to you, try visual tikz, you have code and result, it helped me a lot.

5
  • 1
    It is an awesome implementation, I could use your code as a template. Thank you for the manual, I find it very useful. Commented Dec 5, 2023 at 8:22
  • Which package are the arrows from? I am trying to draw the arrow in my own document, I added \usetikzlibrary{positioning,backgrounds,ducks,calc,arrows.meta,fit} but got an error saying Arrow command unknown, with \draw[Arrow={GREY}{1}] Commented Dec 5, 2023 at 10:22
  • Found it, it is a customized arrow defined by Arrow/.style 2 args= {draw=#1,-{Triangle[angle=120:.5cm 0.3,scale length=0.5*#2,scale width=0.3*#2]},line width=#2*1.2mm} Commented Dec 5, 2023 at 10:26
  • And yes, also the majority of learning is understanding the crazy code that you develop once you master something, it's good that you will find the lines you need, in the nodes there are reserved words if you find one that is not it is probably a style and it is defined above . Commented Dec 5, 2023 at 15:09
  • Nice use of tikzducks. Commented Dec 5, 2023 at 23:30
4

Introduction

This answer provided a quick start to the kind of result you want, presenting some methods to organize your styles.

To organize our solution, let's divide it in 3 files:

  1. The main mew file: mwe.tex;
  2. The style file: myTikzsetStyle.sty;
  3. The TikZ draw file: input_mwe_tikz.tex.

Please, save all of them in the same folder and compile the mwe.tex.

mwe.tex

The main file is simple, it calls the package tikz and its libraries; our own style file, and the chemfig package.

You may find more suitable packages for your chemicals, or draw them in another software and insert them as figures.

To make the insertion of the chemical figure more compact and easy to change in the future, I defined a command named \chemA. We just need to change its definition to change the result. This is the base concept, we will return to in the style file.

mwe.tex file

\documentclass{article} \usepackage{tikz} \usetikzlibrary{arrows} \usetikzlibrary{arrows.meta} \usetikzlibrary{calc} \usetikzlibrary{decorations} \usetikzlibrary{decorations.markings} \usetikzlibrary{shapes} \usetikzlibrary{shapes.misc} \usepackage{myTikzsetStyle} \usepackage{chemfig} \newcommand{\chemA}{ \chemfig{[:75]R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R} } \begin{document} \input{input_mwe_tikz} \end{document} 

myTikzsetStyle.sty

Style files are not only useful for organizing your code or text, but also for being reusable.

The last instruction of each tikzset defines the /.default style. The idea is always to define the /.default to be able to use the style without adding parameters all the time.

The tikzsets are:

  • addCross: adds an X on the figure you define for the node;
  • addSum: same as addCross with a +;
  • myBlock: defines the standard block, many variations are possible;
  • mySimpleArrow: defines the standard arrow;
  • myVecArrow: defines an arrow with different color at the edge and at the middle;
  • myInnerColor: useful for keeping internal color of myVecArrow consistent under connections;
  • myVecArrowColor: special case from myVecArrow to be used in special connections;
  • myInnerNonWhite: used together with myVecArrowColor for connections;
  • figNode: defines a way to insert external figures.

To insert the texts above, I chose to use newcommand as an alternative method to create one command for adding the texts:

myTikzsetStyle.sty file

\NeedsTeXFormat{LaTeX2e}[1994/06/01] \ProvidesPackage{myTikzStyle}[2023-12-03 Custom Package to draw my own styles with TikZ] \tikzset{addCross/.style n args={6}{ minimum size={#5 mm}, %minimum height=10mm, path picture={ \draw[#6] (path picture bounding box.south east) -- (path picture bounding box.north west) (path picture bounding box.south west) -- (path picture bounding box.north east); \node at ($(path picture bounding box.south)!0.4!(path picture bounding box.center)$) {#1}; \node at ($(path picture bounding box.west)!0.4!(path picture bounding box.center)$) {#2}; \node at ($(path picture bounding box.north)!0.4!(path picture bounding box.center)$) {#3}; \node at ($(path picture bounding box.east)!0.4!(path picture bounding box.center)$) {#4}; } }, addCross/.default={}{}{}{}{10}{} } \tikzset{addSum/.style n args={6}{ minimum size={#5 mm}, %minimum height=10mm, path picture={ \draw[#6] (path picture bounding box.south) -- (path picture bounding box.north) (path picture bounding box.west) -- (path picture bounding box.east); \node at ($(path picture bounding box.south west)!0.6!(path picture bounding box.center)$) {#1}; \node at ($(path picture bounding box.south east)!0.6!(path picture bounding box.center)$) {#2}; \node at ($(path picture bounding box.north west)!0.6!(path picture bounding box.center)$) {#3}; \node at ($(path picture bounding box.north east)!0.6!(path picture bounding box.center)$) {#4}; } }, addSum/.default={}{}{}{}{10}{black} } \tikzset{myBlock/.style n args={2}{ every node/.style={rectangle,draw, text=black, minimum width=#1, minimum height=#2,} }, myBlock/.default={1cm}{1cm} } \tikzset{mySimpleArrow/.style n args={2}{ >={latex[#1]}, every path/.style={draw=#2} }, mySimpleArrow/.default={black}{black} } \tikzset{myVecArrow/.style n args={4}{ thick, #1, decoration={markings, mark=at position 1 with {\arrow[semithick, #2]{triangle 60[fill=#3]}}}, % open triangle double distance=1.4pt, shorten >= 5.5pt, preaction = {decorate}, postaction = {draw,line width=1.4pt, #4, shorten >= 4.5pt} }, myVecArrow/.default={black}{black}{white}{white} } \tikzset{myInnerColor/.style={ semithick, #1, line width=1.4pt, shorten >= 4.5pt }, myInnerColor/.default={white} } \tikzset{myVecArrowColor/.style={ myVecArrow={red}{blue}{orange}{green}} } \tikzset{myInnerNonWhite/.style={ myInnerColor={cyan}} } \tikzset{figNode/.style={ path picture={ \node at (path picture bounding box.center) {#1};}} } \newcommand{\myTextTable}[5][]{ \begin{scope}[#1] \node[rectangle, fill=#2, text=#3, text centered, minimum width=80, minimum height=10] at (0,0.5) { \begin{tabular}{c} \textbf{#4} \end{tabular} }; \node[minimum width=20, minimum height=10, align=left, text width = 0.25\textwidth, anchor=north] at (0,0) { {#5} }; \end{scope} } 

input_mwe_tikz.tex

The key idea is always to define the largest set of common features possible, it means, use the environment scope with parameters.

At the first block, there are some red dashed rectangles, one of the filled with green.

The second block are the circle nodes applying purple. Here I added the addCross and addSum from the own style. Notice where it became purple and where it didn't.

The third block is the set of nodes using the style myBlock. This is normally the first block to draw and to define the position of its elements. Here I inserted two nodes using figNode and another node with the chemical.

The fourth block contains the basic set of mySimpleArrow, followed by the fifth block in the foreach loop to insert the myVecArrow, this is a special arrow with a colored space in the middle.

In the sequence there is a myVecArrow with parameters followed by a foreach with myVecArrowColor and myInnerNonWhite. Notice how the arrows combine nicely at the bifurcation. Just ignore the unusual color scheme.

Finally, the last block are the text above using \myTextTable. As we would use the same style more than once, we defined a command able to change some features without repeating the whole code over and over. If any change is necessary, we just do them at the command definition.

input_mwe_tikz.tex file

\begin{tikzpicture}[very thick] \begin{scope}[dashed, red] \draw (-3,-2.25) rectangle ++(5,3.25); \draw[fill opacity=0.4,fill=green!50] (-4.5,2.25) rectangle ++(8,3.5); \end{scope} \begin{scope}[purple] \node[circle,draw,addCross={$+$}{$+$}{}{}{10}{black}] (N1) at (-2,0) {}; \node[addSum] (N2) at (5,0) {}; \node[circle,draw,addSum={1}{2}{3}{4}{10}{blue}] (N3) at (5,-2) {}; \end{scope} \begin{scope}[myBlock] \node (A) at (0,-1.5) {A}; \node (B) at (-4,0) {B}; \node[figNode={\includegraphics[width=1cm]{example-image-c}}] (C) at (3,0) {}; \node[figNode={\includegraphics[width=1cm]{example-image-duck}}] (D) at (-3,4) {}; \node (chemA) at (0.5,4) {\chemA}; \node (I) at (0,0) {$\displaystyle \int$}; \end{scope} \begin{scope}[mySimpleArrow] \path[->] ($(B)+(-1.5,0)$) node[above]{$u$} -- (B); \path[->] (B) -- (N1); \path[->] (N1) -- (I) node[midway, above] {$\dot{x}$}; \path[->] (I) -- ++(1.5,0) coordinate(x) node[above]{$x$} -- (C); \path[->] (x) |- (A) -| (N1); \path[->] (C) |- (N3) node[below,midway]{$\hat{z}$}; \path[->] (N3) -- ++(1.5,0) node[above]{$z$}; \end{scope} \foreach \f in {myVecArrow}{ \draw[\f] (B) |- (D); \draw[\f] (C) -- (N2) node[above,midway]{$\hat{y}$}; \draw[\f] (N2) -- ++(1.5,0) node[above]{$y$}; }; \draw[myVecArrow={cyan}{red}{violet}{violet}] (D) -- (chemA); \foreach \f in {myVecArrowColor,myInnerNonWhite}{ \draw[\f] (chemA) -| (C); \draw[\f] (chemA) -| (N2); }; \begin{scope}[shift={(-3,8)}] \myTextTable{blue}{white}{\Large{Title A}}{Text 1.} \myTextTable[shift={(3,0)}]{blue}{white}{\Large{Title B}}{Text 2.} \myTextTable[shift={(6,0)}]{green!50!black}{white}{\Large{Title C}}{This is a very long text, yet not so long.} \end{scope} \end{tikzpicture} 

Result

The following image show our results.

enter image description here

3
  • 1
    This is an amazing example. BTW I somehow ignored that there are chemicals in the image I've provided, because I was focusing on the aspect of the layout. Commented Dec 4, 2023 at 8:42
  • My guess: if we want to make the three columns like table columns, we just need to add three grey and transparent background rectangles ? Commented Dec 4, 2023 at 8:51
  • I've added a concept and my own implementaion, I hope this made my question clearer Commented Dec 4, 2023 at 14:03
3

How to make it, in generalized terms, which may need some finer details here and there (like opacity etc.), see the pgfmanual:

1. Separating the usual from the unusual

If you remove in your mind all those colors, rounded corners, arrow tips etc. the vast majority of components are ordinary nodes and lines, using some more colorful styles.

What is remaining then are some structures which need a little more considerations:

  • the circle with a plus-sign
  • the 4 vertical color-scales (min .. max etc.)
  • some layered structures (green, right)
  • some labels (x L etc.)
  • legend (lower right)
  • chem-like figures
  • the 4 columns with a kind of "I'm in the background" effect

2. Possible approaches for the unusual parts

There are often more alternatives than I'm listing here. This is just to line out, how it could be achieved.

2.1 Circle+Plus

  • could be a shape, i.e. a \node, with some "+" text
  • could be a \pic, which just draws a circle and two axes

So \pic seems to be a structure to be used often. Think of it as a kind of macro in Tikz-terms.

2.2 Colorful scales

There's a fading-library, see the pgfmanual. Placing 0, min, max is just a \node away, and you probably will introduce 3-4 \pics or just one or two using arguments.

2.3 Layered structure

There's a whole chapter in the pfgmanual about how to do this.

2.4 Placing lables ...

... as \node will always work.

2.5 Legend

Could be done separately, is perhaps better addressed with the columns.

2.6 Chem-like figures

Basically these are simple objects (circles) which could be created by a few \foreach loops, which could include individual colors (see pgfmanal).

A lazy solution would create half a dozen similar \pics, with varying colors and labels inside. Sophisticared solutions may address it all in one go: @Qrrbrbirlbel will certainly have a few tricks to show here.

The ones with the orange background look very much the same, while just the contrasts seem to create a different visual perception. The smeared out ones may be approximated by some wider line width, or matched exactly by the mindmap-library. It's a matter of balancing effect vs. effort.

2.7 Column-structure

There are several options, too, like:

  1. Perceive it all as one big Tikz-drawing. I.e. place \nodes for the headers, other \nodes for the text (which could and should be Latex: \node at (0,-2) {Local PE as node ...};). Probably you'd want to put those columns inside a layer, see above.

  2. WHEN you can provide transparency for the Tikz-drawing in the middle, you just overlay the drawing with whatever table- or minipage-structure seems appropriate. (I never tried this, but speculate, it could be done.)

4
  • 2
    Thank you for the instruction. I've updated my question Commented Dec 1, 2023 at 12:39
  • Very good. However, when you can add some code of your trial to your question, this can be helpful. Commented Dec 1, 2023 at 13:04
  • I've added a concept and my own code Commented Dec 4, 2023 at 14:02
  • @TianjianQin, great! Should this question be closed (there's some dynamics in this process), I'd encourage you to post it again, perhaps in a bit modified form. Keep on, you are on a good track. Commented Dec 4, 2023 at 14:08

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.