【问题标题】:matlab like multiline plot in Mathematicamatlab 像 Mathematica 中的多线图
【发布时间】:2025-12-20 08:05:12
【问题描述】:

所以我有一个值矩阵,行对应于数据集,我想使用 ListPlot 绘制每个值,但我希望 x 轴与索引不同。在matlab中我会:

x = 0:4;

ys = [10 20 40 80 160; 
      20 40 80 160 320; 
      30 60 120 240 480]';

plot(x,ys)

这将给出三行,x 值为 0-4,y 值为每列。

在 Mathematica 中我能想到的最接近的是

x = Range[0,4];

ys = {{10, 20, 40, 80, 160},
      {20, 40, 80, 160, 320},
      {30, 60, 120, 240, 480}};

ListPlot[Transpose[{x,#}]& /@ ys]

这是正确的方法吗?似乎有点神秘。希望有我缺少的功能或选项。

【问题讨论】:

  • 一个小项目:您无需手动重新组合这些 y。以编程方式可以执行 Partition[ys,Length[x]]。同样对于 Leonid Shifrin 的 DateRange,可以使用 x[[{1,-1}]]。没什么大不了的,但是这些消除了一些手动工作。
  • 是的,我的原始问题中的 ys 来自不同的计算......只是希望代码类似于 matlab :-) 感谢第一个和最后一个索引技巧!

标签: wolfram-mathematica plot


【解决方案1】:

在您的特定情况下,由于点是等距的,您可以使用

ListPlot[ys, DataRange -> x[[{1,-1}]]]

希望这不那么神秘。当然你也可以直接使用范围值:

ListPlot[ys, DataRange -> {0, 4}]

【讨论】:

  • 太好了,DataRange 正是我想要的。谢谢!
  • 好的,我会删除我的cmets(然后回来拿这个)
最近更新 更多