程式化收益曲线并填写其中的内容

程式化收益曲线并填写其中的内容

我已经尝试用同样的方式创建下图的曲线很多天了。

我迄今为止的代码:

\documentclass[a4paper]{article}
\usepackage[english,greek]{babel}
\usepackage{ucs} 
\usepackage[utf8x]{inputenc}
\usepackage{pgfplots}
\usepackage{caption}
\usetikzlibrary{intersections,patterns,pgfplots.fillbetween}

\begin{document}
\begin{tikzpicture}

  \draw[->, very thick] (0,0) -- (7,0) node[pos=0.5,below,rotate=0]{Ηλικία};
  \draw[->, very thick] (0,0) -- (0,7) node[pos=0.5,above,rotate=90]{Εισόδημα} ;
\draw[brown, -, thick] (1,0) node[below]{18}--(1,.8); 
\draw[brown, thick] (1,.8) to[out=90,in=180] (6,3.5) node[below]{\footnotesize \footnotesize \begin{tabular}{c}Απόφοιτος\\ β' βάθμιας Εκπαίδευσης\end{tabular} };
\draw[blue, thick, -] (2,0) node[below] {22}--(2,2.3);
\draw[blue, thick] (2,2.3) to[out=90,in=180] (6,6.8) node[below]{\footnotesize \footnotesize \begin{tabular}{c}Απόφοιτος\\ γ' βάθμιας Εκπαίδευσης\end{tabular} };
\draw[dotted] (6,6.8) -- (6,0) node[below]{67};


\end{tikzpicture}

\end{document}

我想要的 年龄-收入

我遇到困难的部分已用黄线标出: 在此处输入图片描述

答案1

out键和的值in分别是曲线切线相对于路径段起点和终点处正 x 轴的角度。

由于您在蓝线和棕线中都设置了from=90,因此这些路径以垂直切线开始。根据您突出显示的黄色,这似乎不是理想的选择。您可以调整from=<angle>每条曲线的值来更改曲线的形状:我在这里选择了4580,但您可以根据需要随意更改它们。

另一个用于路径整形的有用键是looseness,其默认值为1。如果即使在调整角度后,您仍然不喜欢曲线的形状,则可以将其设置looseness为 1 以外的其他值以进一步更改形状。

关于您的代码的其他一些注意事项:

  • 如果您添加align=center(或leftright根据需要),您可以\\直接在节点文本内使用,而不需要嵌套tabular环境。

  • 第二次写入\footnotesize没有任何影响:对于您的代码来说,只需写入一次就足够了。但是,由于我tabular在下面的代码中删除了,因此我使用了 TikZ 的font键,如下所示:font=\footnotesize将整个节点文本置于一种字体大小中。

  • -在路径上添加无箭头是不必要的(除非您需要覆盖范围内的其他箭头设置)。

  • 你有

    \draw[blue, thick, -] (2,0) node[below] {22}--(2,2.3);
    \draw[blue, thick] (2,2.3) to[out=90,in=180] (6,6.8) node[below] {...};
    

    最好将它们放入单个路径中,如下所示:

    \draw[blue, thick] (2,0) node[below] {22} -- (2,2.3) to[out=80,in=180] (6,6.8)
      node[below,font=\footnotesize]{Απόφοιτος\\ γ' βάθμιας Εκπαίδευσης};
    

    这样就无需重复样式选项 ( blue,thick),也无需重复坐标 (2,2.3)。它还会在交叉点处进行线连接,避免难看的间隙(虽然您在 中不会看到它们from=90,但它们确实会以其他角度显示出来)。

这是我更改上述内容之后的代码:

\documentclass[tikz]{standalone}
\usepackage[english,greek]{babel}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}

\begin{document}
\begin{tikzpicture}[align=center] % <-- removes the need for tabulars - could be put here or in individual node options
  \draw[->, very thick] (0,0) -- (7,0) node[pos=0.5,below,rotate=0]{Ηλικία};
  \draw[->, very thick] (0,0) -- (0,7) node[pos=0.5,above,rotate=90]{Εισόδημα};
  \draw[brown, thick] (1,0) node[below] {18} -- (1,.8) to[out=45,in=180] (6,3.5)
    node[below,font=\footnotesize]{Απόφοιτος\\ β' βάθμιας Εκπαίδευσης};
  \draw[blue, thick] (2,0) node[below] {22} -- (2,2.3) to[out=80,in=180] (6,6.8)
    node[below,font=\footnotesize]{Απόφοιτος\\ γ' βάθμιας Εκπαίδευσης};
  \draw[dotted] (6,6.8) -- (6,0) node[below]{67};
\end{tikzpicture}
\end{document}

输出结果如下:

在此处输入图片描述

下面是一个简短的示例,展示了键的效果looseness。值为 时,0起点和终点之间会形成一条直线。值为 时,会1形成四分之一圆弧(如果tofrom相隔 90°)。大于 的值1会使曲线更加松弛,如代码所示:

\documentclass[tikz]{standalone}

\begin{document}
\begin{tikzpicture}
  \foreach \l in {0,0.25,...,3} {%
    \draw (0,0) to[out=90,in=180,looseness=\l] 
      node[inner sep=1pt,pos=0.5,above,sloped,/pgf/number format/precision=3]
        {\pgfmathprintnumber{\l}} ++(5,5);
  }
\end{tikzpicture}
\end{document}

这是输出,其中当前looseness设置显示在每条曲线的上部:

在此处输入图片描述

感谢 Manuel 的评论,我意识到你实际上想要填充两条曲线之间。:-) 你在加载pgfplots然后的正确轨道上\usetikzlibrary{intersections,pgfplots.fillbetween}。标准用法是在pgfplots'axis环境中使用:当仅使用普通的 TikZ 时,我们必须使用略有不同的方法;即

\tikzfillbetween[of=<path1> and <path2>]{<fill style>}

其中路径在使用 绘制时被命名name path=<path1>。在下面的代码中,我将填充放在一个background层上,这样它就不会覆盖文本或轴线。我还添加了,split,every even segment/.style={...}以便将填充区域分成两部分:这允许在曲线交点的每一侧指定不同的颜色/样式。

\documentclass[tikz]{standalone}
\usepackage[english,greek]{babel}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{intersections,pgfplots.fillbetween}
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}

\begin{document}
\begin{tikzpicture}[align=center] % <-- removes the need for tabulars
  \draw[->, very thick] (0,0) -- (7,0) node[pos=0.5,below,rotate=0]{Ηλικία};
  \draw[->, very thick] (0,0) -- (0,7) node[pos=0.5,above,rotate=90]{Εισόδημα};
  \draw[brown,thick,name path=brown] (1,0) node[below] {18} -- (1,.8) to[out=45,in=180] (6,3.5)
    node[below,font=\footnotesize]{Απόφοιτος\\ β' βάθμιας Εκπαίδευσης};
  \draw[blue,thick,name path=blue] (2,0) node[below] {22} -- (2,2.3) to[out=80,in=180] (6,6.8)
    node[below,font=\footnotesize]{Απόφοιτος\\ γ' βάθμιας Εκπαίδευσης};
  \draw[dotted] (6,6.8) -- (6,0) node[below]{67};
  \begin{pgfonlayer}{background}
  \tikzfillbetween[of=brown and blue,split,every even segment/.style={blue!50}]{green!50};
  \end{pgfonlayer}
\end{tikzpicture}
\end{document}

最终结果如下:

在此处输入图片描述

相关内容