多条曲线的光谱色彩图

多条曲线的光谱色彩图

我一直在使用它matlab2tikz来生成很多图,但我发现它在这项特定的工作中很吃力,所以想询问如何在中正确地做到这一点pgfplots / tikz

本质上,我想在一张图上绘制多条曲线,并使用光谱颜色图用均匀分布在光谱上的颜色对它们进行着色。在 MATLAB 中,这非常简单:

figure
const = linspace(0,pi/4,50)';
x = linspace(0,pi,128);
plots = sin(-const*x)';
noOfLines = length(const);
cmp = jet(noOfLines);
hLine = plot(plots);
for line = 1:noOfLines
set(hLine(line),'Color',cmp(line,:));
end
set(hLine,'LineWidth',1.5);

matlab 颜色表

我可以使用 matlab2tikz 导出它并进行编译,从而产生这个华丽的情节:

tikzPlot

问题是 tikz 代码有点暴力破解。它以 50 个穿着戏服的人开始\definecolor

\definecolor{mycolor1}{rgb}{0.00000,0.00000,0.53846}%
\definecolor{mycolor2}{rgb}{0.00000,0.00000,0.61538}%
\definecolor{mycolor3}{rgb}{0.00000,0.07692,1.00000}% ...

每种要使用的颜色,然后 50\addplot

\addplot [color=mycolor2,solid,line width=1.5pt,forget plot]
  table[row sep=crcr]{1 0\\
2   -0.000396497032881626\\
3   -0.000792994003429991\\

用正确的颜色绘制每条线。我知道我要求很多,matlab2tikz所以我想我想知道如何使用 tikz / pgfplots 正确地做到这一点。我有另一个类似的数据集,但它有更多的图,大小达到 1.3 mb,需要很长时间才能编译。

我很高兴能从pgfplot仅包含原始数据的文本文件中的数据集(即plots上例中我的 MATLAB 工作区中的矩阵)创建一个,但不知道接下来该怎么做。谢谢。

编辑:

MATLAB我的代码中,工作区如下:

matlab工作区

然后我dlmwrite通过以下方式将其转换为 .dat 文件:

dlmwrite('data.dat',myData,'delimiter', '\t');

然后我尝试\addplot3并得到:

阴谋

这是我的数据集:

0.99934 1.0005  1.0007  1.0001  0.99934
1.0029  1.0012  0.99933 0.99862 0.9979
1.0013  0.9988  1.0023  0.99525 0.99771
0.99774 0.99582 0.9943  0.99217 0.98699
0.9912  0.98502 0.97814 0.96116 0.94135
0.97022 0.94084 0.89332 0.83747 0.77688
0.88784 0.75475 0.61326 0.462   0.3339
0.58506 0.30003 0.11623 0.034422    0.0078042
0.099072    0.0090417   0.0031278   0.00023727  0.00050435
-0.0014491  0.00053296  -0.00028736 -0.0021953  0.00056537
-0.0024348  5.2456e-05  0.001471    5.6913e-05  -0.0010844
0.0019199   -0.0023666  0.00065858  -2.7668e-05 0.00034113

感谢你的帮助。

答案1

您的const变量看起来像一个y变量,而绘制的函数实际上是f(x,y) = sin(-x*y)

这可以直接绘制在pgfplots

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{
    compat=1.11,
    trig format plots=rad,
}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        view={0}{0},
        enlarge z limits=false,
        enlarge x limits=upper,
        colormap/jet,
    ]
    \addplot3[
        mesh,
        patch type=line,
        domain=0:pi,samples=128,
        domain y=0:pi/4, samples y=50,
        point meta=y,
    ]
    {sin(-y*x)};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

关键思想是制作 3D 网格图,并通过扫描线(即patch type=line)可视化网格线并仅显示 X/Z 平面。我用它point meta=y来将 y 坐标定义为颜色数据。

编辑

如果将数据矩阵放入表中,也可以采用相同的方法:

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{
    compat=1.11,
}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        view={0}{0},
        enlarge z limits=false,
        enlarge x limits=upper,
        colormap/jet,
    ]
    \addplot3[
        mesh,
        patch type=line,
        point meta=y,
    ]
    table {P.dat};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

数据表包含相同的数据,其形式为

0.0e0 0.0e0 0.0e0 0.0e0
2.47371e-2 0.0e0 0.0e0 0.0e0
4.94742e-2 0.0e0 0.0e0 0.0e0
7.42113e-2 0.0e0 0.0e0 0.0e0
9.8948401e-2 0.0e0 0.0e0 0.0e0
1.23685501e-1 0.0e0 0.0e0 0.0e0
1.4842259e-1 0.0e0 0.0e0 0.0e0
1.7315968e-1 0.0e0 0.0e0 0.0e0
1.9789677e-1 0.0e0 0.0e0 0.0e0
[...]
3.0673993e0 0.0e0 0.0e0 0.0e0
3.0921364e0 0.0e0 0.0e0 0.0e0
3.1168735e0 0.0e0 0.0e0 0.0e0
3.1416106e0 0.0e0 0.0e0 0.0e0

0.0e0 1.60283e-2 0.0e0 1.60283e-2
2.47371e-2 1.60283e-2 -3.8e-4 1.60283e-2
4.94742e-2 1.60283e-2 -8.0e-4 1.60283e-2
7.42113e-2 1.60283e-2 -1.19e-3 1.60283e-2
9.8948401e-2 1.60283e-2 -1.59e-3 1.60283e-2
[...]

它以扫描线的形式给出(请忽略第四列;我将其与颜色数据(即 y 坐标)一起导出)。 pgfplots 手册(有关 3d 图的部分)中描述了精确的格式。

注意:pgfplots 无法转置数据文件。因此,它只会显示沿特定轴的扫描线。如果不适合,则需要转置它。

相关内容