受三大功能限制的区域

受三大功能限制的区域

y \sin x我正在尝试对由函数、x = \sin y和限制的区域进行着色 y = 2pi + x。现在我的问题是我无法访问,Pgfplots 1.10因此我无法访问该库fillbetween。我尝试使用绘制下面的区域

\documentclass[a4paper,12pt]{standalone} 
\usepackage{pgfplots}
%\pgfplotsset{compat=1.10}
%\usepgfplotslibrary{fillbetween}

\begin{document}
\pgfplotsset{every axis legend/.append style={
at={(0,0.99)},
anchor=north west}} 
\begin{tikzpicture}
\begin{axis}[
    xmin=-2.5*pi,xmax=pi,ymin=-pi,ymax=2.5*pi,
    domain=-2pi:2pi,
    samples=100,
    xlabel={$x$},  
    ylabel={$y$},
    yticklabels={,,},
    xticklabels={,,},
    axis lines=middle
]
\addlegendentry{$y =x + 2\pi$}
\addplot[black,thick,black,domain=-2*pi:0] {x+2*pi} \closedcycle;
\addplot[fill=gray,opacity=0.1,thick,black,domain=-2*pi:0] {x+2*pi} \closedcycle;

\addplot[color=red,fill= white,thick,domain=-2*pi:0] {sin(deg(x))};
\addplot[color=blue,fill= white,thick,variable=\t, domain=0:2*pi] ({sin(deg(t))}, {t});

\addplot[color=red,fill=gray,opacity=0.2,thick,domain=-pi:0] {sin(deg(x))};
\addplot[color=blue,fill=gray,opacity=0.2,thick,variable=\t, domain=0:pi] ({sin(deg(t))}, {t});

\addlegendentry{$y =x + 2\pi$}
\addplot[color=red,thick,domain=-2*pi:0] {sin(deg(x))};
\addlegendentry{$y =x + 2\pi$}
\addplot[color=blue,thick,variable=\t, domain=0:2*pi] ({sin(deg(t))}, {t});
%\addlegendentry{$x = \sin y$}
]\end{axis}
\end{tikzpicture}
\end{document}

投球手

我尝试在图形上标记出我遇到问题的部分。所有这些都与我如何为图形着色有关。我使用的想法是首先填充下面的整个三角形区域x + 2\pi,然后在需要的地方填充白色。

  • 为什么我必须使用opacity=0.1第一个函数和opacity=0.2 第二个函数才能获得相同的灰色?这是我的问题吗?
  • 为什么x-axis不一致,例如 -pi 和 0 之间更高?与 相同y-axis
  • 标签,为什么第一个和最后一个标签是正确的,但中间的标签总是灰色的?

我认为标签问题是一个小问题,是由我如何填充图形的各个部分引起的。但仍然很奇怪,第一和第二个图例都没问题。所以总结一下,有没有更好的方法来将区域着色为灰色?我试过这里提供的方法用阴影填充两个函数之间的区域,但遗憾的是每次我尝试调用正弦函数时都会崩溃,并且不确定如何使用此方法处理隐式函数。

答案1

简单回答你的三点:

  • black第一个函数中的 后面有一个额外的内容。我认为这会覆盖已定义的fill颜色 ( gray),而black和大致opacity=0.1相同。grayopacity=0.2
  • 我认为这是填充造成的,填充覆盖了轴宽度的一半。上x < -pi/2 半部分被覆盖,x > -pi/2下半部分也被覆盖,导致出现小“台阶”。您可以通过将填充放置在背景层上来解决这个问题。
  • \addlegendentry按照定义的顺序拾取图,而不管它们放在何处,因此\addplots图例中显示的是前三个。forget plot我相信,键会从图例中删除一个图。

顺便说一句,你]之前 有一个假货。\end{axis}

在下面的代码中,我首先绘制线条,然后使用backgroundsTikZ 中的库在背景层上添加填充。

\documentclass[a4paper,12pt,border=3mm]{standalone} 
\usepackage{pgfplots}
%\pgfplotsset{compat=1.10}
\usetikzlibrary{backgrounds}
\begin{document}
\pgfplotsset{every axis legend/.append style={
at={(0,0.99)},
anchor=north west},
cells={anchor=west}} 
\begin{tikzpicture}
\begin{axis}[
    xmin=-2.5*pi,xmax=pi,ymin=-pi,ymax=2.5*pi,
    domain=-2pi:2pi,
    samples=100,
    xlabel={$x$},  
    ylabel={$y$},
    yticklabels={,,},
    xticklabels={,,},
    axis lines=middle
]

\addplot[draw=black,thick,domain=-2*pi:0] {x+2*pi};
\addplot[draw=red,thick,domain=-2*pi:0] {sin(deg(x))};
\addplot[draw=blue,thick,variable=\t, domain=0:2*pi] ({sin(deg(t))}, {t});
\addlegendentry{$y = x + 2\pi$}
\addlegendentry{$y = \sin x$}
\addlegendentry{$x = \sin y$}

\begin{scope}[on background layer]
\addplot[draw=none,fill=gray,fill opacity=0.2,domain=-2*pi:0] {x+2*pi} \closedcycle;
\addplot[draw=none,fill= white,domain=-2*pi:0] {sin(deg(x))};
\addplot[draw=none,fill= white,variable=\t, domain=0:2*pi] ({sin(deg(t))}, {t});
\addplot[draw=none,fill=gray,fill opacity=0.2,thick,domain=-pi:0] {sin(deg(x))};
\addplot[draw=none,fill=gray,fill opacity=0.2,thick,variable=\t, domain=0:pi] ({sin(deg(t))}, {t});
\end{scope}

\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容