我有一个自定义颜色图。我有一个带有颜色条的图。
没有自定义颜色图:颜色条周围没有边框,符合预期。在 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 颜色,从而简化颜色条的渲染
编辑
您还问“为什么会出现意料之外的黑框,但仅限于我的自定义色彩图?”
这是因为 是blueColormap
CMYK 颜色图(因为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}