![pgfplots 中的交叉点问题](https://linux22.com/image/304855/pgfplots%20%E4%B8%AD%E7%9A%84%E4%BA%A4%E5%8F%89%E7%82%B9%E9%97%AE%E9%A2%98.png)
使用pgfplots
我有一个被三条线和轴包围的区域。我使用了intersections
库如下所示此解决方案。问题是,交叉点似乎并不全都正确。由于我只是将线与线相交,因此每对线应该有一个交叉点。下面是产生所示图形的 MWE。我希望蓝色区域是从后面偷看时可以看到的最暗的红色区域。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=left,
every axis x label/.style={at={(ticklabel* cs:1.05)}, anchor=west,},
every axis y label/.style={at={(ticklabel* cs:1.05)}, anchor=west,},
enlargelimits={value=0.2,upper},
scaled ticks=false,
minor x tick num=1,
domain=0:8,
]
\addplot[name path global=line1, black, fill=red, fill opacity=0.2]
{6}node[black,opacity=1,above]{line1}\closedcycle;
\draw[name path global=line2] ({axis cs:4,0}|-{rel axis cs:0,0}) -- ({axis cs:4,0}|-{rel axis cs:0,1})node[pos=0.8,black,opacity=1,right]{line2};
\addplot[fill=red, fill opacity=0.2,domain=0:4] {12}\closedcycle;
\addplot[name path global=line3, black, fill=red, fill opacity=0.2]
{(18-3*x)/2}node[sloped,pos=0.63,opacity=1,above]{line3}\closedcycle;
\fill[name intersections={of=line1 and line2,by=point12},
name intersections={of=line1 and line3,by=point13},
name intersections={of=line2 and line3,by=point23},
][fill=blue](0,0)--(0,6)--(point13)node{13}--(point23)node{23}--(4,0)--(0,0);
\end{axis}
\end{tikzpicture}%
\end{document}
答案1
在这种情况下,您有两个选项可以修复低于 0 的部分:
- 在命令中添加
axis cs:
点fill
- 最新版本
pgfplots
是1.11
。通过更改版本,我无需进行其他更改即可获得您想要的结果。这可能是因为在 中1.11
,默认坐标系是axis cs
。
我将在此展示 #1,因为它稍微复杂一些,并且使用与您使用的相同版本。请注意,将 #1 和 #2 结合起来不会造成任何问题,并且通常最好使用最新版本。
另外,13
由于宏的原因,节点的位置不对\closedcycle
,有多个交点。在这种情况下,您需要line1
和的第二个交点line3
,我们可以通过将第一个交点命名为其他名称,将第二个交点命名为来获得point13
。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=left,
every axis x label/.style={at={(ticklabel* cs:1.05)}, anchor=west,},
every axis y label/.style={at={(ticklabel* cs:1.05)}, anchor=west,},
enlargelimits={value=0.2,upper},
scaled ticks=false,
minor x tick num=1,
domain=0:8,
]
\addplot[name path global=line1, black, fill=red, fill opacity=0.2]
{6}node[black,opacity=1,above]{line1}\closedcycle;
\draw[name path global=line2] ({axis cs:4,0}|-{rel axis cs:0,0}) -- ({axis cs:4,0}|-{rel axis cs:0,1})node[pos=0.8,black,opacity=1,right]{line2};
\addplot[fill=red, fill opacity=0.2,domain=0:4] {12}\closedcycle;
\addplot[name path global=line3, black, fill=red, fill opacity=0.2]
{(18-3*x)/2}node[sloped,pos=0.63,opacity=1,above]{line3}\closedcycle;
\fill[name intersections={of=line1 and line2,by=point12},
name intersections={of=line1 and line3,by={a,point13}},
name intersections={of=line2 and line3,by=point23},
][fill=blue](axis cs:0,0)--(axis cs:0,6)--(point13)node{13}--(point23)node{23}--(axis cs:4,0)--(axis cs:0,0);
\end{axis}
\end{tikzpicture}%
\end{document}