pgfplots:使用任意 RGB 颜色对(3D)曲面进行着色

pgfplots:使用任意 RGB 颜色对(3D)曲面进行着色

我想用任意颜色给冲浪板上色RGB颜色(不同于这个问题,它只是使用颜色图为冲浪着色)。

在这个最小的例子(绘制函数x+y)中,我希望每个补丁的颜色都是red=x, green=y, blue=x*y例如。

如果我还可以设置不透明度的话,我会获得加分:)

我认为这可以使用point meta=explicit symbolic或来完成point meta=Tex code symbolic,但我不知道之后如何使用元数据。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\usepgfplotslibrary{patchplots}
\begin{document}

\begin{tikzpicture}
  \begin{axis}
    \addplot3[surf] { x + y };
  \end{axis}
\end{tikzpicture}

\end{document}

答案1

Pgfplots 1.7 版及之前版本仅支持通过颜色图来显示颜色。

编辑此限制适用于网格/表面图,特殊散点图可能会起作用。

您是第二个请求此功能的用户。我接受该功能请求。

很高兴知道您希望根据参数 x 和 y 来表达 RGB 分量。我想有人还想使用 xcolor 语法提供颜色,因此颜色格式应该足够灵活以支持两者。

编辑:Georges Dupéron

对于那些迫不及待想要尝试的人,你可以看看 Christian 的 pgfplots 的(可能是最前沿的)版本:

# Create a temporary working directory.
workdir="/tmp/$(date +%s)"
mkdir "$workdir"
# Download the latest (as of 2013-02-13) unstable version of PGF
mkdir "$workdir/pgf"
cd "$workdir/pgf";
wget http://www.texample.net/media/pgf/builds/pgfCVS2012-11-04_TDS.tgz -O- | tar zxvf -
# Download the latest version of pgfplots
cd "$workdir"
git clone git://pgfplots.git.sourceforge.net/gitroot/pgfplots/pgfplots
# Tell LaTeX to use these versions
export TEXINPUTS="$workdir/pgf/tex//:$workdir/pgfplots//:"
cd "$workdir/pgfplots"
# Add a dummy tag so we can run pgfplotsrevisionfile.sh, which is required to use pgfplots
git tag 1.7.42
./scripts/pgfplots/pgfplotsrevisionfile.sh
# Compile a small example that plots x*y with red=x, green=y and blue=0
pdflatex source/latex/pgfplots/pgfplotstest/unittests/unittest_shader_interp_explicitcolor_math.tex
# View the resulting PDF
evince unittest_shader_interp_explicitcolor_math.pdf

结果(x*y用绘制mesh/color input=explicit mathparse, point meta/symbolic={x,y,0}):

绘制 x*y,其中红色=x、绿色=y 和蓝色=0

\documentclass[a4paper]{article}

\usepackage{pgfplots}

\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.8}

\begin{document}

\begin{tikzpicture}
%\tracingmacros=2 \tracingcommands=2
\begin{axis}
    \addplot3[
        patch,
        patch type=bilinear,
        shader=interp,
        mesh/color input=explicit mathparse,
        domain=0:1,
        samples=5,
        point meta/symbolic={x,y,0}
        ]
    {x*y};
\end{axis}
\end{tikzpicture}

\end{document}

另一个例子(在使用相同颜色绘图后,sin(deg(x*pi*2))+sin(deg(y*pi*2))使用 绘图):mesh/color input=explicit mathparse, point meta/symbolic={(sin(deg(x*pi*2))+1)/2,(sin(deg(y*pi*2))+1)/2,0}-3

绘制 sin(x)+sin(y),其中红色=sin(x)、绿色=sin(y) 且蓝色=0 和 -3,颜色相同

\documentclass[a4paper]{article}

\usepackage{pgfplots}

\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.8}

\begin{document}

\begin{tikzpicture}
%\tracingmacros=2 \tracingcommands=2
\begin{axis}
    \addplot3[
        patch,
        patch type=bilinear,
        shader=faceted interp,
        mesh/color input=explicit mathparse,
        domain=0:1,
        samples=30,
        point meta/symbolic={(sin(deg(x*pi*2))+1)/2,(sin(deg(y*pi*2))+1)/2,0}
        ]
    {-3};
    \addplot3[
        patch,
        patch type=bilinear,
        shader=faceted interp,
        mesh/color input=explicit mathparse,
        domain=0:1,
        samples=30,
        point meta/symbolic={(sin(deg(x*pi*2))+1)/2,(sin(deg(y*pi*2))+1)/2,0}
        ]
    {sin(deg(x*pi*2))+sin(deg(y*pi*2))};
\end{axis}
\end{tikzpicture}

\end{document}

相关内容