我有以下内容:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{mathtools}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines = middle,
xlabel = $x$,
ylabel = {$\begin{aligned}
\color{blue} f(x)& \color{blue}=1\\
\color {red} g(x)& \color{red}=|x|
\end{aligned}$}
]
\addplot [
name path = A,
domain=-2:2,
color=blue,
]
{1};
\addplot [
name path = B,
domain=-2:2,
color=red,
]
{abs(x))};
\addplot [
pattern=north west lines,
]
fill between [
of=A and B,
soft clip={domain=-1:1}
];
\end{axis}
\end{tikzpicture}
\end{document}
我的目标是在
f(x) = 1
和
g(x) = |x|
图形已绘制,但区域未着色。我尝试用其他函数替换这两个函数,并且成功了,所以我不太确定这里的问题是什么。(我正在使用 ShareLaTex)
答案1
(记录在案:随着 PGFPlots v1.16 的发布,您的示例给出了预期的结果。但是有更好/更简单的方法来实现您想要的。)
不要使用domain
use split
,它为您提供了 3 个可单独处理的段。因此,给出不填充任何内容的常规选项 ( fill=none
),然后向“ segment no 1
”样式声明您想要的填充图案。(段从 0 开始计数,这就是为什么数字 1 是您在这里需要/想要的。)
% used PGFPlots v.1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{amsmath}
\usetikzlibrary{
patterns,
pgfplots.fillbetween,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
xlabel=$x$,
ylabel={
$\begin{aligned}
\color{blue} f(x)& \color{blue}=1\\
\color {red} g(x)& \color{red}=|x|
\end{aligned}$
},
]
\addplot [
name path=A,
domain=-2:2,
color=blue,
] {1};
\addplot [
name path = B,
domain=-2:2,
color=red,
] {abs(x)};
\addplot [
fill=none,
] fill between [
of=A and B,
% --------------------------------------
% the below code is what I have changed
split,
% draw only selected ones:
% every segment no 0/.style: invisible
every segment no 1/.style={
pattern=north west lines,
},
% every segment no 2/.style: invisible
];
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我认为这是fillbetween
库中的一个错误(或至少是一种意外行为) pgfplots
。请注意,这只是我作为用户的个人观点,它的行为可能有特定的原因。
请看下面的示例,我删除了所有不必要的部分以重现此行为。与您的示例一样,该区域未填充。但是,如果您只是注释掉该行axis lines=middle
,该区域将按预期填充。
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
domain=-2:2,
]
\addplot[name path=A,color=blue]{1};
\addplot[name path=B,color=red]{abs(x))};
\addplot[black] fill between[of=A and B,soft clip={domain=-1:1}];
\end{axis}
\end{tikzpicture}
\end{document}
0
启用后处理该点似乎存在问题axis lines=middle
。一个简单的解决方法是使用一个fill between
来自-1:0
和一个单独的来自0:1
。或者,使用split
Stefan Pinnow 提出的方法。
\addplot[pattern=north west lines] fill between[of=A and B,soft clip={domain=-1:0}];
\addplot[pattern=north west lines] fill between[of=A and B,soft clip={domain=0:1}];