3

I'm trying to make a graphic that needs two arrows, I've already found how to rotate the arrow, but I don't want the text to be rotated 180 degrees.

Bonusproblem, I want the red line ticker ...

\documentclass[10pt,a4paper]{article}
\usepackage[dutch]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
 \usetikzlibrary{calc, trees, positioning, arrows, shapes, shapes.multipart, shadows, matrix, decorations.pathreplacing, decorations.pathmorphing}
\usepackage{enumitem}
\setlist{itemsep=0pt}
\usepackage{graphicx}
\begin{document}
 \begin{center}
\begin{tikzpicture}
\tkzInit[ymin=0,ymax=9,xmin=0,xmax=14]
\tkzClip
\tkzDefPoints{1/1/A, 1/7/Y, 13/1/X, 1/2/B, 13/2/E, 7/2/K, 7/6.3/L, 4/5/J, 10/5/M, -2/2.5/C, 16/2.5/D}
 \draw[->, very thick] (A) -- (Y) node[above, yshift=-1cm, xshift=-0.3cm, rotate=90] {effectiviteit};
\draw[->, very thick] (A) -- (X) node[below, xshift=-0.4cm, yshift=-0.3cm] {stress (+)};
\draw[very thick, red] plot [smooth] coordinates {(B) (J) (L) (M) (E)};
 \node[single arrow, rounded corners=3pt, fill=blue!30, draw, align=center, xshift=3cm, yshift=2.5cm, minimum height=4cm, minimum width=2cm]{Concentratie \\ Inspanning };
\node[single arrow, rounded corners=3pt, fill=red!30, draw, align=center, xshift=11cm, yshift=2.5cm, rotate=180, minimum height=4cm, minimum width=2cm]{Relaxatie \\ Ontspanning};
\end{tikzpicture}
\end{center}
\end{document}

enter image description here

4

Instead of rotate=180, you can use shape border rotate=180. To get a thicker red line you can apply ultra thick or even specify the exact thickness via line width=<size> (as I have done below).

enter image description here

But as you can see from the above, with a really thick red line the ends don't look so good, and the intersection with the vertical axis is not very nice. That can be fixed by using line cap=round and whiting out the overlap of the axis to obtain:

enter image description here


You can draw another line by applying a shift to each coordinate (not sure why a scope did not work though). And to make the desired arrows visible, I added a shorten >=-0.4cm so that the arrows of the lines are not obscured by large rotated arrow.

enter image description here

Notes:


Code:

\documentclass[10pt,a4paper]{article}
\usepackage[dutch]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
 \usetikzlibrary{calc, trees, positioning, arrows, shapes, shapes.multipart, shadows, matrix, decorations.pathreplacing, decorations.pathmorphing}
\usepackage{enumitem}
\setlist{itemsep=0pt}
\usepackage{graphicx}
\begin{document}
 \begin{center}
\begin{tikzpicture}
\tkzInit[ymin=0,ymax=9,xmin=0,xmax=14]
\tkzClip
\tkzDefPoints{1/1/A, 1/7/Y, 13/1/X, 1/2/B, 13/2/E, 7/2/K, 7/6.3/L, 4/5/J, 10/5/M, -2/2.5/C, 16/2.5/D}


\draw[line width=5pt, line cap=round, red] plot [smooth] coordinates {(B) (J) (L) (M) (E)};
 \node[single arrow, rounded corners=3pt, fill=blue!30, draw, align=center, xshift=3cm, yshift=2.5cm, minimum height=4cm, minimum width=2cm]{Concentratie \\ Inspanning };
\node[single arrow, rounded corners=3pt, fill=red!30, draw, align=center, xshift=11cm, yshift=2.5cm, shape border rotate=180, minimum height=4cm, minimum width=2cm, ]{Relaxatie \\ Ontspanning};

%% Fill out the overflow of the really thick red line
\fill[white] (A) rectangle ($(A)+(-3.0em,2.0cm)$);

%% Move to be after so that the axis is on top of the thick red line
 \draw[->, very thick] (A) -- (Y) node[above, yshift=-1cm, xshift=-0.3cm, rotate=90] {effectiviteit};
\draw[->, very thick] (A) -- (X) node[below, xshift=-0.4cm, yshift=-0.3cm] {stress (+)};

\end{tikzpicture}
\end{center}
\end{document}

Code: Second Line & Arrows:

\documentclass[10pt,a4paper]{article}
\usepackage[dutch]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{tkz-euclide}
 \usetikzlibrary{calc, trees, positioning, arrows, shapes, shapes.multipart, shadows, matrix, decorations.pathreplacing, decorations.pathmorphing}
\usepackage{enumitem}
\setlist{itemsep=0pt}
\usepackage{graphicx}

\tikzset{My Shift/.style={yshift=0.75cm}}

\begin{document}
{\centering%
\begin{tikzpicture}
\tkzInit[ymin=0,ymax=9,xmin=0,xmax=14]
\tkzClip
\tkzDefPoints{1/1/A, 1/7/Y, 13/1/X, 1/2/B, 13/2/E, 7/2/K, 7/6.3/L, 4/5/J, 10/5/M, -2/2.5/C, 16/2.5/D}


\draw[line width=5pt, line cap=round, red, -latex, shorten >=-0.4cm] plot [smooth] coordinates {(B) (J) (L) (M) (E)};
\draw[line width=5pt, line cap=round, blue, -latex, shorten >=-0.4cm] plot [smooth] coordinates {([My Shift]B) ([My Shift]J) ([My Shift]L) ([My Shift]M) ([My Shift]E)};


\node[single arrow, rounded corners=3pt, fill=blue!30, draw, align=center, xshift=3cm, yshift=2.5cm, minimum height=4cm, minimum width=2cm]{Concentratie \\ Inspanning };

\node[single arrow, rounded corners=3pt, fill=red!30, draw, align=center, xshift=11cm, yshift=2.5cm, shape border rotate=180, minimum height=4cm, minimum width=2cm, ]{Relaxatie \\ Ontspanning};

%% Fill out the overflow of the really thick red line
\fill[white] (A) rectangle ($(A)+(-3.0em,2.0cm)$);

%% Move to be after so that the axis is on top of the thick red line
 \draw[->, very thick] (A) -- (Y) node[above, yshift=-1cm, xshift=-0.3cm, rotate=90] {effectiviteit};
\draw[->, very thick] (A) -- (X) node[below, xshift=-0.4cm, yshift=-0.3cm] {stress (+)};

\end{tikzpicture}}
\end{document}
|improve this answer|||||
  • Thanks for the smooth ending of the line. In fact I want to end it with an arrow. And make the same line in blue 3mm above the red one... – Arne Timperman Nov 6 '14 at 17:53
  • 1
    @Arne: Posted revised solution with another parallel line and arrows. – Peter Grill Nov 7 '14 at 8:41
  • Thanks, I've tried it with "y-shifting" the curve in total, and that didn't work. But this is perfect. Thanks! – Arne Timperman Nov 7 '14 at 12:39

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.