自定义颜色图破坏了颜色条:无法删除边框,并且 Mac Preview 不显示颜色条

自定义颜色图破坏了颜色条:无法删除边框,并且 Mac Preview 不显示颜色条

我有一个自定义颜色图。我有一个带有颜色条的图。

没有自定义颜色图:颜色条周围没有边框,符合预期。在 Mac Preview 中看起来非常好。

使用自定义颜色图:TeX-studio 预览中颜色条周围有黑色边框。Mac 预览中没有颜色条,只有黑色边框。

这里是 MWE。只需取消注释自定义颜色条,希望您会得到与我一样奇怪的结果,并知道如何修复它:

\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz,pgfplots}

%\pgfplotsset{colormap={blueColormap}{[2pt]%
%       color(0000pt)=(RoyalBlue!50!black);
%       color(1000pt)=(RoyalBlue!50!black);
%       color(1000pt)=(RoyalBlue!70!black);
%       color(2000pt)=(RoyalBlue!70!black);
%       color(2000pt)=(RoyalBlue!90!black);
%       color(3000pt)=(RoyalBlue!90!black);
%       color(3000pt)=(RoyalBlue!90!white);
%       color(4000pt)=(RoyalBlue!90!white);
%       color(4000pt)=(RoyalBlue!70!white);
%       color(5000pt)=(RoyalBlue!70!white);
%       color(5000pt)=(RoyalBlue!50!white);
%       color(6000pt)=(RoyalBlue!50!white);
%   }
%}


\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
                colorbar,
                colorbar style={
                    ytick style={draw=none},
                    ytick={0,1,2,3,4,5,6},
                    yticklabels={0,1,2,3,4,5,6},
                    axis line style = { draw = none }
                },
                point meta min=0, 
                point meta max=6
            ]
            \foreach \n in {0,1,...,5}
                %{\edef\temp{\noexpand
                \addplot[ultra thick, smooth,mesh,point meta={\n+0.5},domain={0:1}] {x^\n}; %}\temp}
        \end{axis}
    \end{tikzpicture}
\end{document}

答案1

根本原因是您的colormap定义无效且pgfplots未能抱怨:颜色图包含相同偏移量的多个值。

该问题可以简化为以下最小示例:

\documentclass{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{pgfplots}

\pgfplotsset{colormap={blueColormap}{%[2pt]%
       color(0000pt)=(RoyalBlue!50!black);
       color(1000pt)=(RoyalBlue!50!black);
       color(1000pt)=(RoyalBlue!70!black);
       color(2000pt)=(RoyalBlue!70!black);
       color(2000pt)=(RoyalBlue!90!black);
       color(3000pt)=(RoyalBlue!90!black);
       color(3000pt)=(RoyalBlue!90!white);
       color(4000pt)=(RoyalBlue!90!white);
       color(4000pt)=(RoyalBlue!70!white);
       color(5000pt)=(RoyalBlue!70!white);
       color(5000pt)=(RoyalBlue!50!white);
       color(6000pt)=(RoyalBlue!50!white);
   }
}


\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
                colorbar,
                point meta min=0, 
                point meta max=6
            ]
        \end{axis}
    \end{tikzpicture}
\end{document}

此示例在evince和中显示正常xpdf,但 Acrobat Reader 弹出窗口提示 pdf 无效。

解决方案是消除双重偏移。以下方法有效:

\documentclass{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{pgfplots}

\pgfplotsset{colormap={blueColormap}{%[2pt]%
       color(0000pt)=(RoyalBlue!50!black);
       color(1000pt)=(RoyalBlue!50!black);
       %color(1000pt)=(RoyalBlue!70!black);
       color(2000pt)=(RoyalBlue!70!black);
       %color(2000pt)=(RoyalBlue!90!black);
       color(3000pt)=(RoyalBlue!90!black);
       %color(3000pt)=(RoyalBlue!90!white);
       color(4000pt)=(RoyalBlue!90!white);
       %color(4000pt)=(RoyalBlue!70!white);
       color(5000pt)=(RoyalBlue!70!white);
       %color(5000pt)=(RoyalBlue!50!white);
       color(6000pt)=(RoyalBlue!50!white);
   }
}


\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
                colorbar,
                point meta min=0, 
                point meta max=6
            ]
        \end{axis}
    \end{tikzpicture}
\end{document}

或者,为了保持你的“跳跃”:

\documentclass{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{pgfplots}

\pgfplotsset{colormap={blueColormap}{[2pt]%
       color(0000pt)=(RoyalBlue!50!black);
       color(1000pt)=(RoyalBlue!50!black);
       color(1002pt)=(RoyalBlue!70!black);
       color(2000pt)=(RoyalBlue!70!black);
       color(2002pt)=(RoyalBlue!90!black);
       color(3000pt)=(RoyalBlue!90!black);
       color(3002pt)=(RoyalBlue!90!white);
       color(4000pt)=(RoyalBlue!90!white);
       color(4002pt)=(RoyalBlue!70!white);
       color(5000pt)=(RoyalBlue!70!white);
       color(5002pt)=(RoyalBlue!50!white);
       color(6000pt)=(RoyalBlue!50!white);
   }
}


\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
                colorbar,
                point meta min=0, 
                point meta max=6
            ]
        \end{axis}
    \end{tikzpicture}
\end{document}

请注意,最后一个文件需要很长时间,因为颜色图包含数千个数据点 - 并且所涉及的颜色以 CMYK 给出,这需要额外的努力(比较 pgfplots 指出的警告)。

我克服性能限制的建议是 * 降低颜色图的采样密度(即不要2pt在 [0:6000] 的比例上使用网格宽度,而是大幅增加网格宽度) * 将输入颜色重新定义为 RGB 颜色,从而简化颜色条的渲染


编辑

您还问“为什么会出现意料之外的黑框,但仅限于我的自定义色彩图?”

这是因为 是blueColormapCMYK 颜色图(因为RoyalBlue是在 CMYK 中定义的)。Pgfplots 可以处理 CMYK 阴影,但 PGF 不能。为了满足这一限制,Pgfplots 对 应用了特殊步骤colorbar,不幸的是,这会导致被忽略。我刚刚发现并修复了这个问题;只要在轴上出现语句,draw=none它就会出现。\addplot3

一个简单的解决方法是添加colormap default colorspace=rgb 您定义自定义颜色图:

\documentclass{standalone}
\usepackage[dvipsnames]{xcolor}
\usepackage{pgfplots}

\pgfplotsset{
    colormap default colorspace=rgb,
    colormap={blueColormap}{
       color(0000pt)=(RoyalBlue!50!black);
       color(1000pt)=(RoyalBlue!50!black);
       color(2000pt)=(RoyalBlue!70!black);
       color(3000pt)=(RoyalBlue!90!black);
       color(4000pt)=(RoyalBlue!90!white);
       color(5000pt)=(RoyalBlue!70!white);
       color(6000pt)=(RoyalBlue!50!white);
   }
}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
                colorbar,
                colorbar style={
                    axis line style={draw=none},
                },
                point meta min=0, 
                point meta max=6
            ]
        \end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容