如何根据它们的值为多条线着色?

How to color multiple lines based on their value?

我制作了一个包含 50 条曲线的图,每条曲线对应一个名为“Jacobi 常数”的参数的特定值,因此我将 50 个 jacobi 常数值存储在名为 jacobi_cst_L1 的数组中:

   3.000900891023230
   3.000894276927840
   3.000887643313580
   3.000881028967010
   3.000874419173230
   3.000867791975870
   3.000861196034850
   3.000854592397690
   3.000847948043080
   3.000841330136040
   3.000834723697250
   3.000828099771820
   3.000821489088600
   3.000814922863360
   3.000808265737810
   3.000801695858850
   3.000795067776960
   3.000788475204760
   3.000781845363950
   3.000775192199620
   3.000768609354090
   3.000761928862980
   3.000755335851910
   3.000748750854930
   3.000742084743060
   3.000735532899990
   3.000728906460450
   3.000722309400740
   3.000715644446600
   3.000709016645110
   3.000702431180730
   3.000695791284050
   3.000689196186970
   3.000682547292110
   3.000675958537960
   3.000669315388860
   3.000662738391370
   3.000656116141060
   3.000649560630930
   3.000642857256680
   3.000636330415510
   3.000629657944820
   3.000623060310100
   3.000616425935580
   3.000609870077710
   3.000603171772120
   3.000596554947660
   3.000590018845460
   3.000583342259840
   3.000576748353570

我想使用颜色图为我的曲线着色,然后在侧栏中显示图例,该图例显示与每种颜色的轨道对应的数值。

考虑到我的示例图像,我想在侧栏中添加常量数组,然后根据侧栏为每条曲线着色。

% Family of 50 planar Lyapunov orbits around L1 in dimensionless unit
fig = figure;

for k1 = 1:(numel(files_L1_L2_Ly_prop)-2)
    plot([Ly_orb_filt(1).prop(k1).orbits.x],[Ly_orb_filt(1).prop(k1).orbits.y],...
        "Color",my_green*1.1); hold on  %"Color",my_green*1.1
    colorbar()
end
axis equal


% Plot L1 point
plot(Ly_orb_filt_sys_data(1).x,Ly_orb_filt_sys_data(1).y,'.',...
    'color',[0,0,0],'MarkerFaceColor',my_green,'MarkerSize',10);
text(Ly_orb_filt_sys_data(1).x-0.00015,Ly_orb_filt_sys_data(1).y-0.0008,'L_{1}');

%Primary bodies plots 
plot(AstroData.mu_SEM_sys  -1,0,'.',...
    'color',my_blue,'MarkerFaceColor',my_blue,'MarkerSize',20);
text(AstroData.mu_SEM_sys-1,0-0.001,'$Earth + Moon$','Interpreter',"latex"); 

grid on;
xlabel('$x$','interpreter','latex','fontsize',12);
ylabel('$y$','interpreter','latex','FontSize',12);

如何根据雅可比常数值为每条线着色?

您可以使用任何颜色图生成一系列 RGB-triplets 供绘图例程读取(或创建一个 m-by-3 矩阵01 你自己之间的元素):

n = 10;  % Plot 10 lines
x = 1:15;
colour_map = jet(n);  % Get colours. parula, hsv, hot etc.

figure;
hold on
for ii = 1:n
    % Plot each line individually
    plot(x, x+ii, 'Color', colour_map(ii, :))
end

colorbar  % Show the colour bar.

在 R2007b 上生成:

请注意,对颜色图进行索引会产生线性间隔的颜色,因此您需要进行大量插值或计算才能获得所需的特定颜色。然后您可以(需要?)手动修改生成的颜色条的标签以反映您的输入值。我会简单地使用 parula(50),将其索引视为 linspace(jacobi(1), jacobi(end), 50) 然后 my_colour = interp1(linspace(jacobi(1), jacobi(end), 50), parula(50), jacobi).

所以在您的代码中,不要对每一行使用 "Color",my_green*1.1,而是使用 "Color",my_colour(kl,:),其中 my_colour 是您定义的任何 RGB 三元组系列。