如何在R Markdown中绘制带离散颜色映射的图形
在R Markdown中用pgfplots实现离散颜色映射的解决方法
你在LaTeX里能正常生成离散色映射的图形,但放到R Markdown输出PDF时却变成了连续色条,核心问题出在shader=interp参数以及R Markdown环境下pgfplots的渲染逻辑。
修改方案:
- 将
shader=interp替换为shader=faceted interp,这个参数会让曲面按离散颜色区间着色,同时保留插值的平滑视觉效果 - 保留
colormap access=piecewise constant和colorbar style里的ytick=data,确保离散刻度生效
修改后的完整代码:
--- output: pdf_document: default html_document: df_print: paged header-includes: - \usepackage{pgfplots} - \pgfplotsset{compat=1.13} --- \begin{tikzpicture} \begin{axis}[ domain=-2:2, view={0}{90}, colormap={CM}{samples of colormap=(13 of hot)}, colormap access=piecewise constant, colorbar right, colorbar style={ ytick=data, % 可选:需要显示对应刻度标签的话,取消下面注释并按需调整数值 % yticklabels={-0.4,-0.2,0,0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8,2.0} } ] \addplot3[surf, shader=faceted interp] {exp(-x^2-y^2)*x+0.5}; \end{axis} \end{tikzpicture}
补充说明:
在R Markdown的PDF输出环境中,shader=interp会强制启用连续颜色插值,覆盖你设置的离散色映射规则。而shader=faceted interp会让pgfplots严格按照colormap access=piecewise constant的配置,把数据分割成对应colormap样本数的离散区间,每个区间使用单一颜色,同时保证区间内的平滑过渡。
另外也可以尝试把pgfplots的compat版本升级到更高(比如1.17),部分旧版本在R Markdown环境中对离散色映射的支持存在兼容性问题,修改\pgfplotsset{compat=1.17}也可能解决问题。
内容的提问来源于stack exchange,提问作者pck
相关产品推荐
相关产品推荐

