今天我尝试重现几个经济图表。以下是相图的示例:
我想使用 tikzpicture 环境。但我不知道如何开始创建相对长度的轴,所以有类似的东西吗width=0.7\textwidth
?如何定义这个 tikzpicture 的大小?相对于我的 A4 纸的大小还是像素大小更好?也许有人可以帮助创建普通图表轴和例如线\dot k
以及一些关系位置点k^*
。
我是这样开始的:
\begin{center}
\begin{tikzpicture}[
scale=5,
axis/.style={very thick, ->, >=stealth'},
important line/.style={thick},
dashed line/.style={dashed, thin},
pile/.style={thick, ->, >=stealth', shorten <=2pt, shorten
>=2pt},
every node/.style={color=black}
]
\draw[axis] (-0.1,0) -- (1.8,0) node(xline)[right] {$k_t \equiv \frac{K_t}{H_t}$};
\draw[axis] (0,-0.1) -- (0,1.8) node(yline)[above] {$c_t \equiv \frac{C_t}{H_t}$};
\draw[important line] (0.9,0.1) coordinate (C) -- (0.9,1.6)
coordinate (C) node[above, text width=5em] {$\dot c = 0$};
\end{tikzpicture}
\end{center}
这是对轴进行建模的好方法吗?我应该如何添加标签k^*
?我必须记住我将 c 线置于 0.9 处?
更新:应用解决方案。
\begin{center}
\begin{tikzpicture}[scale=2]
\tikzset{every picture/.style=semithick}
\begin{axis}[
axis lines=left,
xmin=0,
xmax=2.2,
ymin=0,
ymax=2.2,
clip=false,
xtick={\empty},
ytick={\empty},
xlabel=$\small k_t \equiv \frac{K_t}{H_t}$,
xlabel style={at={(current axis)}, yshift=-5.8cm, xshift=0.3cm},
ylabel=$\small c_t \equiv \frac{C_t}{H_t}$,
ylabel style={at={(current axis.north west)},rotate=-90,yshift=-19em, xshift=0.5cm},
]
\tiny % scale up entire tikz, scale down the font size
\addplot[no marks,domain=0.2:1.8] {-x+2}; % negative slope
\node[anchor=south] at (axis cs:0.2,1.8) {$\dot k = 0$}; % label of k0
\draw[dashed, gray] % k1 line
(axis cs:0.25,0) node[below, black] {$k_1(\mu^{\ast})$} --
(axis cs:0.25,1.5);
\draw[dashed, gray] % k2 line
(axis cs:1.75,0) node[below, black] {$k_2(\mu^{\ast})$} --
(axis cs:1.75,1.5);
\draw % c = 0 line
(axis cs:1,0) node[below] {$k^{\ast}$} --
(axis cs:1,2) node[above] {$\dot c=0$};
\draw[dashed,width=2em, gray] % c* line
(axis cs:0,1) node[left, black] {$c^{\ast}$} --
(axis cs:1,1);
\draw[myarr] % lower transition arrows
(axis cs:0.4,0.4) --
(axis cs:1,1);
\draw[myarr] % upper transition arrows
(axis cs:1.6,1.6) --
(axis cs:1,1);
\path % mini triangles
pic at (axis cs:0.6,0.3) {coordsys} % down left
pic[yscale=-1] at (axis cs:1.2,0.5) {coordsys} % down right
pic[rotate=180] at (axis cs:1.4,1.8) {coordsys} % up right
pic[xscale=-1] at (axis cs:0.8,1.6) {coordsys}; % up left
\end{axis}
\normalsize
\end{tikzpicture}
\end{center}
我修改了你的代码以满足我的需求。我认为现在对我来说没问题了。我无法解决的最后一个问题是让 x 轴和 y 轴以某种方式从距原点 -0.1 处开始。这只是表面的,但很有趣。谢谢!
答案1
目前很难知道纯 TikZ 还是pgfplots
是最好的工具,因为这两个包都允许轻松绘制问题中的图表。下面我展示了这两种可能性。
如果您需要绘制一些函数,那么pgfplots
这是我的建议;如果不需要,那么纯 TikZ 就可以完成这项工作。
在这两种情况下,您都可以在绘制图表后使用适当的选项来缩放图表。使用pgfplots
,您可以访问环境的width=<lenght>
和height=<lenght>
选项axis
,从而控制绘图的最终宽度和高度。另一方面,使用纯 TikZ,您可以设置x=<lenght>
和y=<lenght>
(参见上面的代码),这也会缩放您的图表。在这两种情况下,您也有选项scale=<factor>
(尽管这也会缩放可能不需要的标签)。
在下面的例子中我pgfplots
仅用于说明;使用axis cs
坐标系,您可以将元素放置在指定位置;一些装饰和图片,您就可以开始了:
代码:
\documentclass[border=3pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows,decorations.markings}
\tikzset{
coordsys/.pic={
\draw[->] (0,0) -- ++(6mm,0pt);
\draw[->] (0,0) -- ++(0pt,6mm);
},
myarr/.style={decoration={
markings,
mark=between positions 0 and 1 step 4mm with {\arrow{stealth}},
},
postaction=decorate
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=left,
xmin=0,
xmax=2.2,
ymin=0,
ymax=2.2,
clip=false,
xtick={\empty},
ytick={\empty}
]
\addplot[no marks,domain=0.2:1.8] {-x+2};
\draw[dashed]
(axis cs:0.25,0) node[below] {$k_1(\mu^{\ast})$} --
(axis cs:0.25,1.5);
\draw[dashed]
(axis cs:1.75,0) node[below] {$k_2(\mu^{\ast})$} --
(axis cs:1.75,1.5);
\draw
(axis cs:1,0) node[below] {$k^{\ast}$} --
(axis cs:1,2) node[above] {$\iota=0$};
\draw[dashed]
(axis cs:0,1) node[left] {$c^{\ast}$} --
(axis cs:1,1);
\draw[myarr]
(axis cs:0.4,0.4) --
(axis cs:1,1);
\draw[myarr]
(axis cs:1.6,1.6) --
(axis cs:1,1);
\path
pic at (axis cs:0.3,0.3) {coordsys}
pic[rotate=180] at (axis cs:1.7,1.7) {coordsys}
pic[xscale=-1] at (axis cs:0.8,1.7) {coordsys}
pic[yscale=-1] at (axis cs:1.2,0.3) {coordsys};
\end{axis}
\end{tikzpicture}%
\end{document}
想法相同,但是现在使用纯 TikZ:
\documentclass[border=3pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows,decorations.markings}
\tikzset{
coordsys/.pic={
\draw[->] (0,0) -- ++(6mm,0pt);
\draw[->] (0,0) -- ++(0pt,6mm);
},
myarr/.style={decoration={
markings,
mark=between positions 0 and 1 step 4mm with {\arrow{stealth}},
},
postaction=decorate
},
}
\begin{document}
\begin{tikzpicture}[x=3cm,y=3cm]
\draw[->]
(-0.1,0) -- (2,0);
\draw[->]
(0,-0.1) -- (0,2);
\draw[dashed]
(0.25,0) node[below] {$k_1(\mu^{\ast})$} --
(0.25,1.5);
\draw[dashed]
(1.75,0) node[below] {$k_2(\mu^{\ast})$} --
(1.75,1.5);
\draw
(1,0) node[below] {$k^{\ast}$} --
(1,2) node[above] {$\iota=0$};
\draw[dashed]
(0,1) node[left] {$c^{\ast}$} --
(1,1);
\draw[myarr]
(0.4,0.4) --
(1,1);
\draw[myarr]
(1.6,1.6) --
(1,1);
\path
pic at (0.3,0.3) {coordsys}
pic[rotate=180] at (1.7,1.7) {coordsys}
pic[xscale=-1] at (0.8,1.7) {coordsys}
pic[yscale=-1] at (1.2,0.3) {coordsys};
\end{tikzpicture}
\end{document}
如果您使用pgfplots
,则可以使用width=<lenght>
和height=<lenght>
选项来控制图的最终宽度和高度。另一方面,使用纯 TikZ,您可以设置x=<lenght>
和y=<lenght>
(参见上面的代码),这也会缩放您的图表。在这两种情况下,您也都有选项scale=<factor>
。