pgfplots 中的交叉点问题

pgfplots 中的交叉点问题

使用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 的部分:

  1. 在命令中添加axis cs:fill
  2. 最新版本pgfplots1.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}

在此处输入图片描述

相关内容