tengo este codigo
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4)
(4) edge node [left] {} (1);
\end{tikzpicture}
\end{document}
que produce este gráfico:
Mi objetivo es producir un gráfico como este:
Perdón por el mal dibujo. Probé varias combinaciones (4) edge node [bend left] {} (1);
y (4) edge node [loop left] {} (1);
fue en vano.
Respuesta1
Solo para mostrar otro enfoque, este caso de uso es exactamente para lo que se crearon las claves bend left
y :bend right
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4)
(4) edge[bend right] node [left] {} (1);
\end{tikzpicture}
\end{document}
Estas claves también aceptan un <angle>
valor opcional para configurar simultáneamente las claves in
y out
simétricamente, por lo que escribir
(4) edge[bend right=90] node [left] {} (1);
resultará en
Si se requiere un ajuste asimétrico de las teclas in
y ,out
solución de cfres el camino a seguir.
Respuesta2
Un enfoque es utilizar \draw
y especificar los ángulos entrantes y salientes. Simplemente especificando los nombres de los nodos se construirá la ruta con respecto al centro del nodo (aunque no se dibujará desde allí). También puede especificar anclajes de nodo. Por ejemplo, la línea roja conecta (4.north)
con (1.north)
.
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',auto,node distance=3cm,
thick,main node/.style={circle,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\draw [->] (1) -- (2);
\draw [->] (2) -- (3);
\draw [->] (3) -- (4);
\draw [->] (4) to [out=150,in=30] (1);
\draw [->,red] (4.north) to [out=150,in=30] (1.north);
\end{tikzpicture}
\end{document}
Respuesta3
Hay varias formas de dibujar curvas, si esa es la cuestión. Aquí hay uno:
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}
[
->,
>=stealth',
auto,node distance=3cm,
thick,
main node/.style={circle, draw, font=\sffamily\Large\bfseries}
]
\node[main node] (1) {a};
\node[main node] (2) [right of=1] {b};
\node[main node] (3) [right of=2] {c};
\node[main node] (4) [right of=3] {d};
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4);
\draw
(4) [out=150, in=20] to (1);
\end{tikzpicture}
\end{document}
Aquí hay una manera de hacerlo parte del original \path
usando edge
(y variando un poco los ángulos):
\path[every node/.style={font=\sffamily\small}]
(1) edge node [right] {} (2)
(2) edge node [right] {} (3)
(3) edge node [right] {} (4)
(4) edge [out=150, in=90] (1);