Mathematica 3D绘图,x和y轴坐标位于不同的列表中

时间:2012-01-04 11:40:01

标签: list 3d wolfram-mathematica

我有一个(i x j)大小的矩阵mat,其中包含实验的值。

如果我使用ListPlot3D[mat],我可以在3D图中将其可视化。

我还有两个大小为i(aRow)且大小为j(aCol)的数组,这是我从实验中确定的。

如何使用ListPlot3D[mat]aRow替换aCol显示的默认x和y轴?

2 个答案:

答案 0 :(得分:3)

请查看Ticks选项,并在文档中使用该示例。


这是一种方法。首先生成一些示例数据:

mat = Table[Exp[-(x^2 + y^2)], {x, -2, 2, .1}, {y, -2, 2, .1}];    
aCol = aRow = Round[mat[[20]], 0.01];

将其绘制成3D。我选择在所有可能的标记中显示每10个刻度线。 list[[;; ;; 10]]选择列表中的每个第10个元素。

ListPlot3D[mat,
 Ticks -> {
   Transpose[{Range@Length[aRow], aRow}][[;; ;; 10]],
   Transpose[{Range@Length[aCol], aCol}][[;; ;; 10]],
   Automatic}]

Mathematica graphics

也在2D中绘制它。默认情况下,ListDensityPlot有一个Frame(不是Axes),因此我们使用FrameTicks

ListDensityPlot[mat,
 FrameTicks -> {
   Transpose[{Range@Length[aRow], aRow}][[;; ;; 10]],
   Transpose[{Range@Length[aCol], aCol}][[;; ;; 10]],
   None, None},
 Mesh -> Automatic]

Mathematica graphics


<强>更新

如果您不需要任意刻度,只是通常的线性空格刻度标记的不同范围,那么您可以使用DataRange选项,如下所示:

ListPlot3D[mat, DataRange -> {{0, 1}, {0, 1}}]

Mathematica graphics

如果您仍然需要{x,y,z}格式的数据(因为坐标不均匀),您可以使用

构建它
Join @@ MapThread[Append, {Outer[List, aRow, aCol], mat}, 2]

答案 1 :(得分:2)

如果aRowbRow中的连续元素之间的差异不变,您可以执行类似

的操作
ListPlot3D[mat, DataRange -> (Through[{Min, Max}[#]] & /@ {aCol, aRow})]

如果没有,那么您可以创建一个包含元素{aCol[[i]], aRow[[j]], mat[[j,i]]}的列表并绘制该列表。有不同的方法,例如

list = Flatten[Table[{aCol[[i]], aRow[[j]], mat[[j, i]]}, 
    {i, Length[aCol]}, {j, Length[aRow]}], 1];

ListPlot3D[list]

修改

创建list的更快捷方法是执行类似

的操作
list = ConstantArray[0, {Length[aCol] Length[aRow], 3}];
list[[All, {2, 1}]] = Tuples[{aRow, aCol}];
list[[All, 3]] = Flatten[mat];