重新调整颜色图和轴中的颜色

重新调整颜色图和轴中的颜色

我已经创建了以下格式的文件(workfile.dat):

<x1> >y1> <z>
<x1> >y2> <z>
<x1> >y3> <z>

<x2> >y1> <z>
<x2> >y2> <z>
<x2> >y3> <z>

etc.

我已经创建了一个 surf pgf:

图片

使用以下代码:

\begin{tikzpicture}
 \begin{axis}[view={0}{90},colormap/cool]
  \addplot3[surf] table [row sep=newline] {./workfile.dat};
 \end{axis}
\end{tikzpicture}

我希望值为<z>null 的地方是白色的,而不是像上图那样。我希望它看起来像这样:

预期图片

这意味着 x 轴以小数点后两位的十进制格式表示,y 轴从 0 到 1(而不是 0 到 400)。

此外,我想知道是否可以在 tikz pgf 中像在 matplotlib 中一样对颜色条使用 LogNorm。

编辑

下面是我所做事情的一个例子:

\documentclass[a4paper,10pt]{article}
\usepackage{pgfplots}

\begin{document}
 \begin{tikzpicture}
  \begin{axis}[view={0}{90},
               colormap/cool,
               y filter/.code=\pgfmathparse{\pgfmathresult/400}]
   \addplot3[surf] table [row sep=newline] {./workfile.dat};
  \end{axis}
 \end{tikzpicture}
\end{document}

这是我得到的输出:输出

蓝线似乎是正确的,但我无法解释 = 0 处的灰色背景。

编辑2

新示例:

文件数据 workfile.dat

1 1 0
1 2 0

2 1 0
2 2 1

输出文件

代码:

\documentclass[a4paper,10pt]{article}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
 \begin{axis}[view={0}{90},
             colormap/cool,
    ]
  \addplot3[surf] table [row sep=newline] {./workfile_2.dat};
 \end{axis}
\end{tikzpicture}
\end{document}

如您所见,输入数据中只有一个元素的值为“1”,但整个区域都是蓝色。

答案1

根据定义,曲面图 ( surf) 总是用 的“合适”颜色填充整个区域colormap。这里,完全的表示轴的背景(白色)不再可见。

为了看到“白色”,您必须确定表面图是否真的是您想要的。如果事实证明这是真的(根据您的问题,似乎确实如此),您主要有一个选择:即定义一个颜色图,其中 z=0 的值恰好被映射到白色。

但是,如果您只是想查看背景颜色(白色)并希望看到几条固定高度的线条,那么最好使用轮廓图。我建议您使用轮廓图,因为它看起来更接近您的第二张 2d 图片:

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{pgfplots}

\begin{document}
\pagestyle{empty}

\begin{tikzpicture}
 \begin{axis}[view={0}{90},
             colormap/cool,
             colorbar,
    ]
  \addplot3[contour gnuplot] table [row sep=newline] {
  1 1 0
1 2 0

2 1 0
2 2 1
  };
 \end{axis}
\end{tikzpicture}

\end{document}

如果你确实想要一个surf情节,你仍然可以按如下方式进行:

这是定义“合适”的初步尝试colormap- 即,您有一个surf图,其中 z=0 恰好获得白色:

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{pgfplots}

\begin{document}
\pagestyle{empty}

\begin{tikzpicture}
 \begin{axis}[view={0}{90},
             colormap={custom}{color(0)=(red) color(2)=(white) color(4)=(blue)},
             colorbar,
    ]
  \addplot3[surf,shader=interp] table [row sep=newline] {
  1 1 0
1 2 0

2 1 0
2 2 1
  };
 \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
 \begin{axis}[view={0}{90},
             colormap={custom}{color(0)=(red) color(1)=(white) color(2)=(green) color(4)=(blue)},
             colorbar,
    ]
  \addplot3[surf,shader=interp] table [row sep=newline] {
  1 1 0
1 2 0

2 1 0
2 2 1
  };
 \end{axis}
\end{tikzpicture}
\end{document}

在这种方法中,您可能需要选择正确的值shader(我的选择有效,另一个合适的值可能flat corner适合您的应用程序)。

我相信等高线图解决方案可能会更好(对于这个应用程序来说工作量更少、更漂亮 - 只要您计算的数据轮廓足够好)。

相关内容