4

I need to edit this code so the red dashed line can end up at R4 not R3 as in the following pictureenter image description here .

 \documentclass[tikz,border=3.14mm]{standalone}
 \usetikzlibrary{positioning,calc,arrows.meta}
\begin{document}
\begin{tikzpicture}[bullet/.style={draw,circle,minimum width=3mm,inner 
sep=0pt,
fill=cyan!50}]
\node[bullet,label={[yshift=-2mm]below:$R_1$}] (R1){};
\node[right=2cm of R1,bullet,label={[yshift=-2mm]below:$R_2$}] (R2){};
\node[right=2cm of R2,yshift=6mm,bullet,label={[yshift=2mm]above:$R_3$}] (R3) 
 {};
\node[right=2cm of R3,yshift=-6mm,bullet,label={[yshift=-2mm]below:$R_4$}] 
  (R4){};
  \node[right=2cm of R4,bullet,label={[yshift=-2mm]below:$R_5$}] (R5){};
\foreach \X [evaluate=\X as \Y using {int(\X+1)}] in {1,...,4}
{\draw[thick,-latex,cyan!50] (R\X) -- (R\Y);}


 \draw[thick,red,{Circle}-latex,dashed] let \p1=($(R2)-(R1)$), \p2=($(R3)- 
(R2)$), 
\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)} in 
([yshift=1mm]R1.north) to[out=\n1,in=180,looseness=0.5] 
([yshift=1mm]R2.north) to[out=0,in=\n2-180,looseness=0.5] 
  ([yshift=1mm,xshift=-2mm]R3.north);

  \end{tikzpicture}
      \end{document}
1
  • Can you change the title of your question to make it easier to search? For example, "How to draw and modify a dotted line above the path?"
    – AndréC
    Commented Dec 7, 2018 at 7:07

3 Answers 3

8

You need to add some code for the red line:

\draw[thick,red,{Circle}-latex,dashed] let \p1=($(R2)-(R1)$), \p2=($(R3)-(R2)$), \p3=($(R4)-(R3)$),
\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)},\n3={atan2(\y3,\x3)} in 
([yshift=1mm]R1.north) to[out=\n1,in=180,looseness=0.5] 
([yshift=1mm]R2.north) to[out=0,in=\n2-180,looseness=0.5] 
([yshift=1mm]R3.north) to[out=0,in=\n3-180,looseness=0.5] 
([yshift=1mm,xshift=-2mm]R4.north);

With the complete MWE

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

\usetikzlibrary{positioning,calc,arrows.meta}


\begin{document}
\begin{tikzpicture}[bullet/.style={draw,circle,minimum width=3mm,inner sep=0pt,fill=cyan!50}]
\node[bullet,label={[yshift=-2mm]below:$R_1$}] (R1){};
\node[right=2cm of R1,bullet,label={[yshift=-2mm]below:$R_2$}] (R2){};
\node[right=2cm of R2,yshift=6mm,bullet,label={[yshift=2mm]above:$R_3$}] (R3) 
 {};
\node[right=2cm of R3,yshift=-6mm,bullet,label={[yshift=-2mm]below:$R_4$}] 
  (R4){};
  \node[right=2cm of R4,bullet,label={[yshift=-2mm]below:$R_5$}] (R5){};
\foreach \X [evaluate=\X as \Y using {int(\X+1)}] in {1,...,4}
{\draw[thick,-latex,cyan!50] (R\X) -- (R\Y);}


%\draw[thick,red,{Circle}-latex,dashed] let \p1=($(R2)-(R1)$), \p2=($(R3)-(R2)$), 
\draw[thick,red,{Circle}-latex,dashed] let \p1=($(R2)-(R1)$), \p2=($(R3)-(R2)$), \p3=($(R4)-(R3)$),
\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)},\n3={atan2(\y3,\x3)} in 
([yshift=1mm]R1.north) to[out=\n1,in=180,looseness=0.5] 
([yshift=1mm]R2.north) to[out=0,in=\n2-180,looseness=0.5] 
([yshift=1mm]R3.north) to[out=0,in=\n3-180,looseness=0.5] 
([yshift=1mm,xshift=-2mm]R4.north);

\end{tikzpicture}
\end{document}

you get:

enter image description here

1
  • If you use ([yshift=1mm]R2.north) to[out=0,in=180,looseness=0.5] instead, there won't be a kink. (+1) \draw[thick,red,{Circle}-latex,dashed] let \p1=($(R2)-(R1)$), \p2=($(R4)-(R3)$), \n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)} in ([yshift=1mm]R1.north) to[out=\n1,in=180,looseness=0.5] ([yshift=1mm]R2.north) to[out=0,in=180,looseness=0.5] ([yshift=1mm]R3.north) to[out=0,in=\n2-180,looseness=0.5] ([yshift=1mm,xshift=-2mm]R4.north);
    – user121799
    Commented Dec 5, 2018 at 4:17
7

Instead of reconstructing the path of the red dotted arrow by clever calculations, you can use the preaction key which allows you to place the path in a temporary scope that you move vertically with transform canvas.

To make it look prettier, I rounded the angles with the rounded key rounded corners=5pt.

\path[rounded corners=5pt,preaction={draw,red,thick,{Circle}-latex,
,transform canvas={yshift=3mm}}
] (R1.center)to(R2.center)to(R3.center)to(R4.center);

path

The result without the rounded corners:

path-no

The result with rounded corners and dashed lines:

dashed

\documentclass[tikz,border=3.14mm]{standalone}
 \usetikzlibrary{positioning,calc,arrows.meta}
\begin{document}
\begin{tikzpicture}[bullet/.style={draw,circle,minimum width=3mm,inner 
sep=0pt,
fill=cyan!50}]
\node[bullet,label={[yshift=-2mm]below:$R_1$}] (R1){};
\node[right=2cm of R1,bullet,label={[yshift=-2mm]below:$R_2$}] (R2){};
\node[right=2cm of R2,yshift=6mm,bullet,label={[yshift=2mm]above:$R_3$}] (R3) 
 {};
\node[right=2cm of R3,yshift=-6mm,bullet,label={[yshift=-2mm]below:$R_4$}] 
  (R4){};
  \node[right=2cm of R4,bullet,label={[yshift=-2mm]below:$R_5$}] (R5){};
\foreach \X [evaluate=\X as \Y using {int(\X+1)}] in {1,...,4}
{\draw[thick,-latex,cyan!50] (R\X) -- (R\Y);}

\path[rounded corners=5pt,preaction={draw,red,dashed,thick,{Circle}-latex,
,transform canvas={yshift=3mm}}
] (R1.center)to(R2.center)to(R3.center)to(R4.center);
  \end{tikzpicture}
      \end{document}
4

a variation of nice AndréC answer:

enter image description here

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta,
                chains, 
                positioning}

\begin{document}
    \begin{tikzpicture}[
node distance = 6mm and 20mm,
  start chain = going right,
   arr/.style = {thick, -Stealth, color=#1},
   dot/.style = {circle, draw, fill=cyan!50,
                 minimum size=3mm, inner sep=0pt,
                 on chain, join=by {arr=cyan!50},
                 node contents={}},
every label/.style = {label distance=2mm, inner sep=0pt}
                        ]
\node (R1) [dot,label=below:$R_1$];
\node (R2) [dot, right=of R1,label=below:$R_2$];
\node (R3) [dot, above right=of R2,label=above:$R_3$];
\node (R4) [dot, below right=of R3,label=below:$R_4$];
\node (R5) [dot, right=of R4,label=below:$R_5$];

\draw[arr=red, densely dashed, rounded corners=4pt,
      {Circle[length=1.6mm]}-Latex, shorten <=-0.8mm,
      transform canvas={yshift=1.5mm}]
      (R1.north) -- (R2.north) -- (R3.north) -- (R4.north);
    \end{tikzpicture}
\end{document}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .