我正在绘制以下填充区域
\documentclass{scrartcl}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{figure}[htpb]
\centering
\begin{tikzpicture}[scale=.5]
\begin{axis}[hide axis, clip bounding box=default tikz]
\plot[name path=A, very thick,samples=201,domain=-1:1, color=blue] {sqrt(x*(x^2-x-1)+1};
\plot[name path=B, very thick,samples=201,domain=-1:1, color=blue] {-sqrt(x*(x^2-x-1)+1};
\addplot[fill=blue,opacity=.3] fill between [of=A and B, soft clip={domain=-1:1}];
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
产生这个输出
如您所见,右侧的尖点缺失(打印在纸上时,间隙实际上很大)。当将域稍微增加到 1 以上时,尖点看起来仍然有点奇怪。到目前为止,我最好的解决方案是在 (1,0) 处添加一个节点,这看起来还不错,但不是最佳方案。有没有更好的方法来处理这种情况?
答案1
您需要在一条曲线上绘制它才能获得line join=miter
看起来不错的(默认)。然后,您也可以关闭曲线,以便填充它。所以你不需要fillbetween
。你也没有真正使用pgfplots
任何东西。(也没有使用xcolor
)
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\filldraw[blue, very thick, fill opacity=.3, samples=201] plot[domain=-1:0.99] ( \x , {sqrt(\x*(\x*\x-\x-1)+1} ) -- plot[domain=1:-1] ( \x , {-sqrt(\x*(\x*\x-\x-1)+1} ) -- cycle;
\end{tikzpicture}
\end{document}
如您所见,您在 PGFplots 中的版本被拉长了,因为您缺少axis equal
PGFplots 中的选项。如果您更喜欢拉长的版本,那么您可以将例如添加xscale=1.4
到上面的代码中。