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
相同。gray
opacity=0.2
- 我认为这是填充造成的,填充覆盖了轴宽度的一半。上
x < -pi/2
半部分被覆盖,x > -pi/2
下半部分也被覆盖,导致出现小“台阶”。您可以通过将填充放置在背景层上来解决这个问题。 \addlegendentry
按照定义的顺序拾取图,而不管它们放在何处,因此\addplots
图例中显示的是前三个。forget plot
我相信,键会从图例中删除一个图。
顺便说一句,你]
之前 有一个假货。\end{axis}
在下面的代码中,我首先绘制线条,然后使用backgrounds
TikZ 中的库在背景层上添加填充。
\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}