我有一个(i x j)大小的矩阵mat
,其中包含实验的值。
如果我使用ListPlot3D[mat]
,我可以在3D图中将其可视化。
我还有两个大小为i(aRow
)且大小为j(aCol
)的数组,这是我从实验中确定的。
如何使用ListPlot3D[mat]
和aRow
替换aCol
显示的默认x和y轴?
答案 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}]
也在2D中绘制它。默认情况下,ListDensityPlot
有一个Frame
(不是Axes
),因此我们使用FrameTicks
ListDensityPlot[mat,
FrameTicks -> {
Transpose[{Range@Length[aRow], aRow}][[;; ;; 10]],
Transpose[{Range@Length[aCol], aCol}][[;; ;; 10]],
None, None},
Mesh -> Automatic]
<强>更新强>
如果您不需要任意刻度,只是通常的线性空格刻度标记的不同范围,那么您可以使用DataRange
选项,如下所示:
ListPlot3D[mat, DataRange -> {{0, 1}, {0, 1}}]
如果您仍然需要{x,y,z}
格式的数据(因为坐标不均匀),您可以使用
Join @@ MapThread[Append, {Outer[List, aRow, aCol], mat}, 2]
答案 1 :(得分:2)
如果aRow
和bRow
中的连续元素之间的差异不变,您可以执行类似
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];