3d 轨迹的颜色图和颜色条。 (Matlab)

Colormap and colorbar for 3d trajectory. (Matlab)

我想在 Matlab 中做类似于下图 (source) 的事情。忽略向量和阴影圆锥;我只想

  1. 在单位球体上绘制轨迹,由函数 m(x)(其值是球体上的点)给出,
  2. 根据参数x给它上色(运行从-inf+inf),
  3. 显示一个颜色条,解释从 x 值到颜色的映射。

我可以借助内置函数 spheremesh 轻松绘制球体,我可以使用 plot3 绘制轨迹。要生成 x 值,我可以使用类似

的东西
x = tan((-1:0.01:1)*pi/2);

它给出了适合函数类型 m(x) 的点分布(大部分操作将围绕 x = 0)。

棘手的部分是颜色。我查看了 colormapcolorbar 内置函数,但两者似乎都与网格和曲面有关,而不是与曲线有关,因此我看不到一种明显的方法可以使其适应我的用例。

有人对我如何进行有任何想法吗?

使用plot时,一条线不可能是多色的。为了使一条线具有多种颜色,您必须绘制每个单独的线段,然后分别为它们着色。例如:

% make some dummy data
% note that this is in the form of 1 x N row vectors
t = -.99:0.01:0.99;
x = cos(t * pi/2); 
y = sin(t * pi/2);
z = t;

% reorder data in order to plot individual line segments
indices = [1:length(x) - 1; 2:length(x)];
figure; 
p = plot3(x(indices), y(indices), z(indices), 'LineWidth', 2);
set(p, {'Color'}, num2cell(parula(length(x) - 1), 2)); % see what happens when you comment out this line

您可以通过更改上面的 parula 关键字来更改您想要的 colormap。您可以使用任何提供的颜色图,或创建您自己的颜色图(以 M x 3 RGB 三重矩阵的形式)。

然后您可以添加颜色条(请注意,这些是虚拟值)。

c = colorbar;
caxis([-6 6]);
set(c, 'Ticks', [-6, -4, -2, -1, 0, 1, 2, 4, 6]);
set(c, 'TickLabels', {'-\infty', '-4', '-2', '-1', '0', '1', '2', '4', '\infty'});

您可以使用 scatter3() 实现有点相似但不同的效果。它与 plot3() 类似,但允许您为其绘制的每个数据点设置颜色(和大小,如果您愿意)。如果审美适合你,这是一种简单而通用的方法。