Arrows in tikz Markov chain diagram overlap
bend left
and bend right
come with parameters, the bending angles. Adjusting them allows you to avoid the intersections. (BTW, I also removed packages that were not used. Note also that the arrows
library got superseded by arrows.meta
but I kept arrows
for now.)
\documentclass[reqno]{amsart}
\usepackage{tikz}
\usetikzlibrary{automata}
\usetikzlibrary{positioning} % ...positioning nodes
\usetikzlibrary{arrows} % ...customizing arrows
\tikzset{node distance=4.5cm, % Minimum distance between two nodes. Change if necessary.
every state/.style={ % Sets the properties for each state
semithick,
fill=gray!10},
initial text={}, % No label on start arrow
double distance=4pt, % Adjust appearance of accept states
every edge/.style={ % Sets the properties for each transition
draw,
->,>=stealth', % Makes edges directed with bold arrowheads
auto,
semithick}}
\begin{document}
\begin{figure}[htb]
\centering
\begin{tikzpicture}
\node[state] (s1) {State 1};
\node[state, below right of=s1] (s2) {State 2};
\node[state, below left of=s1] (s3) {State 3};
\draw (s1) edge[loop above] (s1);
\draw (s1) edge[bend left] (s2);
\draw (s1) edge[bend right] (s3);
\draw (s2) edge[bend left=12] (s1);
\draw (s2) edge[loop right] (s2);
\draw (s2) edge[bend right=12] (s3);
\draw (s3) edge[bend right=12] (s1);
\draw (s3) edge[bend right] (s2);
\draw (s3) edge[loop left] (s3);
\end{tikzpicture}
\end{figure}
\end{document}
you can reduce default value of bend angle. just add bend angle=15
to your tikzset
(similarly @marmoth change it locally for two arrows bend).
off topic:
- for labeling of arrows is handy to use
quotes
library and than wrote it as for example... (s1) edge["label",bend left] (s2)
. package
hyperref
had to be load last in preamble (except in rare cases)\documentclass[reqno]{amsart} \usepackage{amsmath, amssymb} \usepackage{pgfplots} % it load tikz too \pgfplotsset{compat=1.16} \usetikzlibrary{automata, arrows.meta, % ...customizing arrows positioning, % ...positioning nodes quotes} % For edge labels \usepgfplotslibrary{fillbetween} \tikzset{node distance=4.5cm, % Minimum distance between nodes. Change if necessary. every state/.style={ % Sets the properties for each state semithick, fill=gray!10}, initial text={}, % No label on start arrow double distance=4pt, % Adjust appearance of accept states every edge/.style={ % Sets the properties for each transition draw, semithick, -Stealth, % Makes edges directed with bold arrowheads auto}, bend angle=15 % Reduce default bend angle } \usepackage{hyperref} % had to be last in preamble \begin{document} \begin{figure}[htb] \centering \begin{tikzpicture}[] \node[state] (s1) {State 1}; \node[state, below right of=s1] (s2) {State 2}; \node[state, below left of=s1] (s3) {State 3}; \draw (s1) edge[loop above] (s1) (s1) edge[bend left] (s2) (s1) edge[bend right] (s3) % (s2) edge[bend left] (s1) (s2) edge[loop right] (s2) (s2) edge[bend right] (s3) % (s3) edge[bend right] (s1) (s3) edge[bend right] (s2) (s3) edge[loop left] (s3); \end{tikzpicture} \end{figure} \end{document}