3

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}
  • 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 Dec 7 '18 at 7:07
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

  • 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 Dec 5 '18 at 4:17
5

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}
2

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}

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.