我已经尝试用同样的方式创建下图的曲线很多天了。
我迄今为止的代码:
\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>
每条曲线的值来更改曲线的形状:我在这里选择了45
和80
,但您可以根据需要随意更改它们。
另一个用于路径整形的有用键是looseness
,其默认值为1
。如果即使在调整角度后,您仍然不喜欢曲线的形状,则可以将其设置looseness
为 1 以外的其他值以进一步更改形状。
关于您的代码的其他一些注意事项:
如果您添加
align=center
(或left
或right
根据需要),您可以\\
直接在节点文本内使用,而不需要嵌套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
形成四分之一圆弧(如果to
和from
相隔 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}
最终结果如下: