1

I'm trying to replicate the following figure.

enter image description here

This is my attempt, but I want to get something more precise.

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc} 

\begin{document}

\begin{tikzpicture}[dot/.style={circle,inner sep=1pt,fill,label={#1},name=#1},
  extended line/.style={shorten >=-#1,shorten <=-#1},
  extended line/.default=1cm]

\draw[extended line,thick,<->] (0,0) -- (4.5,0) node[anchor=north west] {\small state 1};
\draw[extended line,thick,<->] (0,0) -- (0,4.5) node[anchor=south east] {\small state 2};

\coordinate (A) at (0,0);
\coordinate (B) at (4,-1);

\draw [extended line=2cm, <->] (A) -- (B) coordinate[midway] (M)
node[pos=1.2,right=1em, font=\small]{$X$};     


\draw [dashed, <->] ($(M)!3cm!270:(A)$) -- ($(M)!3cm!90:(A)$) node[pos=0.9,right=1em, font= \small]{$m=x^*+\varepsilon$ space of discount factors} coordinate[pos=0.2] (x);

\node [dot=right:$x^{*}$] at (M) {}; 
\fill [red] (M) circle [radius=2pt] ;


\coordinate (C) at (2,-1);
\coordinate (D) at (1,4);
\coordinate (P) at (3,0);


\draw [shorten >=-30pt,shorten <=-30pt] (C) -- (D) node [pos=1.2,right=1em, font=\small]{$p=1$};
\draw [shorten >=-30pt,shorten <=-30pt] (P) -- +($(D)-(C)$) node [pos=1.2,right=1em, font=\small]{$p=2$};

\draw[blue,-latex] (0,0) -- (x);

\node [dot=right:$m_{1}$] at (x) {};

\end{tikzpicture}
\end{document}

However, I would like to add a dashed line from m onwards as in the picture, and I also like to highlight in red only the portion of the line through x* to m with positive values of the y-axis. Can I do it with \path? Is the rest of the code correct? Do you have any suggestions for improving it? I hope my question is clear. Thank you for your time and help.

1

Most of this is from my previous answer.

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

\begin{document}

\begin{tikzpicture}[dot/.style={circle,inner sep=2pt,fill,label={#1},name=#1},
  extended line/.style={shorten >=-#1,shorten <=-#1},
  extended line/.default=1cm,font=\small]

\draw[extended line,thick,<->] (0,0) -- (4.5,0) node[anchor=north west] {state 1};
\draw[extended line,thick,<->] (0,0) -- (0,4.5) node[anchor=south east] {state 2};

\coordinate (A) at (0,0);
\coordinate (B) at (4,-1);

\draw [extended line=2cm, <->] (A) -- (B) coordinate[midway] (M)
node[pos=1.3,sloped,above]{$X$};     

\draw [extended line,dashed, <->] ($(M)!3cm!270:(A)$) -- ($(M)!3cm!90:(A)$) 
%node[pos=0.9,right=1em]{$m=x^*+\varepsilon$ space of discount factors} 
coordinate[pos=0.2] (x);

\draw[blue,-latex] (0,0) -- (x) coordinate[pos=2](y) coordinate[pos=0.7](z1);
\draw[dashed] (x) -- (y) coordinate[pos=0.3](z2);
\foreach \X in {1,2}
{\draw ($(z\X)!3cm!270:(A)$) -- ($(z\X)!4cm!90:(A)$)
node[pos=0.1,right=1pt]{$p=\X$} (intersection cs:first
line={($(z\X)!3cm!270:(A)$) -- ($(z\X)!4cm!90:(A)$)},second line={(A)--(B)})
node[fill,inner sep=2pt,circle]{};
}

\node [red,dot=below left:$x^{*}$] at (M) {}; 
\node [red,dot=above left:$m_{1}$] at (x) {};
\end{tikzpicture}
\end{document}

enter image description here

  • Much appreciated, even though your code is still difficult to understand for a novice like me. When I run your code, the black intersection points with X get both moved to the origin, why? – Nenne May 2 at 16:13
  • @Nenne Which compiler do you use? And when was the last time you updated your TeX installation? I get this very output when running pdflatex on my code. – marmot May 2 at 16:16
  • I'm using TeXworks, I updated my installation in december 2017... – Nenne May 2 at 16:18
  • @Nenne Could you perhaps try to update it? For me it is hard to debug since I cannot reproduce the issue. – marmot May 2 at 16:19
  • Sorry for asking that, how should I do? – Nenne May 2 at 16:40
2

You can use \path and angle between two coordinates from here.

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections} 
\makeatletter      
\newcommand{\getLengthAndAngle}[2]{%
    \pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}
                              {\pgfpointanchor{#2}{center}}
    \global\let\myangle\pgfmathresult % we need a global macro 
    \pgfpointdiff{\pgfpointanchor{#1}{center}}
                 {\pgfpointanchor{#2}{center}}
    \pgf@xa=\pgf@x % no need to use a new dimen
    \pgf@ya=\pgf@y
    \pgfmathparse{veclen(\pgf@xa,\pgf@ya)/28.45274} % to convert from pt to cm   
    \global\let\mylength\pgfmathresult % we need a global macro
}
\makeatother 
\begin{document}

\begin{tikzpicture}[dot/.style={circle,inner sep=1pt,fill,label={#1},name=#1},
  extended line/.style={shorten >=-#1,shorten <=-#1},
  extended line/.default=1cm]

\draw[name path=state_x,extended line,thick,<->] (0,0) -- (4.5,0) node[anchor=north west] {\small state 1};
\draw[extended line,thick,<->] (0,0) -- (0,4.5) node[anchor=south east] {\small state 2};

\coordinate (A) at (0,0);
\coordinate (B) at (4,-1);

\draw [extended line=2cm, <->] (A) -- (B) coordinate[midway] (M)
node[pos=1.2,right=1em, font=\small]{$X$};     


\path [name path=mx,dashed, <->] ($(M)!3cm!270:(A)$) -- ($(M)!3cm!90:(A)$) node[pos=0.9,right=1em, font= \small]{$m=x^*+\varepsilon$ space of discount factors} coordinate[pos=0.2] (x);

\node [dot=right:$x^{*}$] at (M) {}; 
\fill [red] (M) circle [radius=2pt] ;


\coordinate (C) at (2,-1);
\coordinate (D) at (1,4);
\coordinate (P) at (3,0);


\draw [shorten >=-30pt,shorten <=-30pt] (C) -- (D) node [pos=1.2,right=1em, font=\small]{$p=1$};
\draw [shorten >=-30pt,shorten <=-30pt] (P) -- +($(D)-(C)$) node [pos=1.2,right=1em, font=\small]{$p=2$};
\draw[blue,-latex] (0,0) -- (x);
%%%%%%% CODE Added %%%%%%%%%%%%%%%%%%
\getLengthAndAngle{A}{x}
\draw [dashed](x) --++ (\myangle:\mylength);
\node [dot=left:$m_{1}$] at (x) {};
\path [name intersections={of=state_x and mx,by={xx}}];
\getLengthAndAngle{M}{x}
\draw [dashed] (x)--++( \myangle:\mylength);
\draw [dashed] (M)--++( \myangle+180:\mylength);
\draw [dashed] (M)--(xx);
\draw [dashed,red] (xx)--(x);
\end{tikzpicture}
\end{document}

enter image description here

  • Thank you for your help, that was much appreciated! – Nenne May 2 at 16:15
  • @Nenne, your welome. – ferahfeza May 2 at 16:51

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.