水平线消失是不可能的吗?

水平线消失是不可能的吗?

TikZ 中的路径淡入淡出选项显然不适用于水平线。对于绘制常数函数以及在两点之间画一条线。使它们稍微倾斜可以解决问题。这是一个已知错误吗?有没有什么方法可以解决?

这是一个最小的例子

\documentclass[a4paper,11pt]{article}
\usepackage{tikz,pgfplots}
\usetikzlibrary{fadings}
\begin{document}
\begin{tikzpicture}[>=stealth]
  \begin{axis}[scale=3, domain=-1.1:6.5, xmin=-1, xmax=6.5,ymax=2, axis lines=none]

   \addplot+[no marks,red,dashed,domain=-1:6.5] {0.7};
   \addplot+[no marks,red,dashed,domain=-1:6.5,path fading=east] {0.8}; %not working


   \draw[red,dashed,path fading=east] (axis cs:-1,0.9) -- (axis cs:6.5,0.9); %not working
   \draw[red,dashed,path fading=east] (axis cs:-1,0.9) -- (axis cs:6.5,1);

  \end{axis}

\end{tikzpicture}
\end{document}

答案1

嗯,这是可能的,但你必须与 TikZ 合作。你所做的本质上是尝试将非零区域上定义的淡入淡出调整到具有(非零宽度)的零区域。该fadings库提供了另一个键fit fading,你可以使用该键关闭根据路径调整大小的淡入淡出,但无论路径长度如何,这都会淡入淡出。或者你可以简单地使用 Jake 所建议的方法,即稍微扩展边界框以获得非零区域而无需实际绘制任何东西。或者你需要定义自己的自定义淡入淡出,在这种情况下应该很棘手。无论如何,这里有一个包含前两个选项的示例:

\documentclass[a4paper,11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\usetikzlibrary{fadings}

\begin{document}
\begin{tikzpicture}[>=stealth]
  \begin{axis}[domain=-1.1:6.5, xmin=-1, xmax=6.5,ymax=2, axis lines=none]

   \addplot+[no marks,red,dashed,domain=-1:6.5] {0.7};
   \addplot+[no marks,red,dashed,domain=-1:6.5,path fading=east,fit fading=false] {0.8}; %now working


   \draw[red,dashed,path fading=east] (axis cs:-1,0.9) -- (axis cs:6.5,0.9) ++(0,1pt); %now working
   \draw[red,dashed,path fading=east] (axis cs:-1,0.9) -- (axis cs:6.5,1);

  \end{axis}

\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,你实际上并没有淡化路径,你看到的是底层的淡化通过因此,路径高度为零意味着如果您尝试适应,您将看不到任何东西。这就是 TikZ 所抱怨的。

答案2

有多种方法可以延伸路径,使得其边界框获得正表面。

\draw[red,dashed,path fading=east] (axis cs:-1,0.9) -- (axis cs:6.5,0.9) 
++(0,1pt); % extend the path with a degenerate subpath (see Percusse)

\draw[red,dashed,path fading=east] (axis cs:-1,0.9) -- (axis cs:6.5,0.9) 
++(0,1pt) -- ++(0,0); % extend the path with a zero length subpath

\draw[red,dashed,path fading=east] (axis cs:-1,0.9) -- (axis cs:6.5,0.9) 
-- ++(0,1pt); % extend the subpath

最好的解决方案是使用退化子路径(只有一个坐标,Percusse),尽管这似乎有点不妥。但其他两个仅适用于默认淡入淡出。

对于其他两种解决方案,路径延伸必须位于边界框的褪色边缘(此处为右侧/东侧),这样您就看不到它们。但是,如果线条非常粗,您会看到故障,但在这种情况下,最好使用矩形。

另一个解决方案是在该线上绘制一个褪色的白色矩形,并在矩形的褪色边框上绘制一条白线以消除故障。如果这是可能的,那么这是一个更好的解决方案,因为它也适用于 evince。

相关内容