我正在编写一个 MATLAB 程序,将 MATLAB 图导出到 tikz 代码。我发现非常有用的功能之一也是我想实现的功能是指定表面颜色。在 MATLAB 中,通常会运行代码
surfc(X,Y,Z,C)
其中[X,Y]=meshgrid(x,y)
是矢量的网格x,y
,Z=f(X,Y)
是这些网格的某个函数,C
是表面颜色数据。在 pgfplots 手册中,作者指出X,Y,Z
可以使用以下代码导出数据:
XX=X'; YY=Y'; ZZ=Z';
data = [ XX(:) YY(:) ZZ(:) ]
save P.dat data -ASCII
这可以在第 538 页的 pgfplots 手册中找到。但是,此导出忽略了 中的表面颜色数据C
。在某些模拟中,C
可能与典型的 z 轴不同,例如C = X.*Y
(注意.*
, 相当于 MATLAB 中的 Hadamard 积)。有没有办法在 pgfplots 中考虑这个数量?如果可以,如何将其导出并集成到代码中?
总的来说,我的问题可以分为两个部分:
- 有没有办法导出
C
以指定表面颜色数据并设置颜色条轴?最好是这样的:
XX=X'; YY=Y'; ZZ=Z' CC = CC';
data = [ XX(:) YY(:) ZZ(:) CC(:)]
save P.dat data -ASCII
- pgfplots 接受这个吗?如果是,我该如何使用导出的数据?(小例子会很有帮助)
为了阐明我所说的 2),我将提供一个小例子。X,Y,Z
导出数据时,可以使用代码
\addplot3[surf,mesh/cols=10,mesh/ordering=rowwise,shader=interp] file {P.dat};.
绘制冲浪数据。如果另外导出颜色数据,上述代码行会如何变化?
答案1
有趣的是,我能够通过反复试验找到答案。对于任何对这类工作感兴趣的人,你所要做的就是使用我建议的代码:
XX=X'; YY=Y'; ZZ=Z' CC = CC';
data = [ XX(:) YY(:) ZZ(:) CC(:)]
save P.dat data -ASCII
然后通过addPlot
如下方式扩展命令:
\addplot3[surf,mesh/cols=10,mesh/ordering=rowwise,shader=interp, point meta = explicit] file {P.dat};
获得所需的结果,即表面根据导出表中的第四列进行着色。关键字point meta = explicit
告诉 pgf,该表具有以下结构
xcol ycol zcol colordata
因此,pgf 直接知道如何为表面着色以及在哪里找到信息。非常好的功能,遗憾的是 pgf 手册中没有明确提到冲浪图。我想这是一个读者应该辨别的功能。