2

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.

4

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

If calc does not find the right intersections on your machine, you could try

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

\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);

\path[name path=AB,overlay] (A) -- (8,-2);
\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)$)
coordinate[pos=0.3] (x\X)
node[pos=0.1,right=1pt]{$p=\X$};
\path[name path=aux\X,overlay]($(z\X)!3cm!270:(A)$) -- ($(z\X)!4cm!90:(A)$);
\path[name intersections={of=AB and aux\X,by=i\X}] (i\X)
node[fill,inner sep=2pt,circle]{};
}
\draw[red] (0,0) -- (x1);
\node [red,dot=below left:$x^{*}$] at (M) {}; 
\node [red,dot=above left:$m_{1}$] at (x) {};
\end{tikzpicture}
\end{document}
11
  • 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 '19 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.
    – user121799
    May 2 '19 at 16:16
  • I'm using TeXworks, I updated my installation in december 2017...
    – Nenne
    May 2 '19 at 16:18
  • @Nenne Could you perhaps try to update it? For me it is hard to debug since I cannot reproduce the issue.
    – user121799
    May 2 '19 at 16:19
  • @Nenne This depends on which installation you are using. AFAIK TeXworks is not an installation. For instance, I use TeXLive, which comes with MacTeX and has an update manager. AFAIK there is only one other major installation which is MikTeX. (Sorry, I do not know much about these things.)
    – user121799
    May 2 '19 at 16:44
3

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

2
  • Thank you for your help, that was much appreciated!
    – Nenne
    May 2 '19 at 16:15
  • @Nenne, your welome.
    – user31034
    May 2 '19 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.