Is it possible to get MATLAB to automatically associate legend icon colors with the applicable data?
2 ビュー (過去 30 日間)
古いコメントを表示
I’m attempting to hard code colors to data in a 2D plot using the following code;
% Clear out all variables from the Workspace and the Command Window
clear all;
clc;
% Variables for plotting
To_Time = 58560;
Time_Tag = [58568.4; 58571.8; 58573.4; 58574.4; 58577.4; 58579.8; 58582.4; 58584.1; 58587.6; 58589];
ID = [10; 2; 3; 4; 10; 6; 7; 2; 10; 2];
Measured_Data = [1.25; 2.31; 3.3; 4.9; 5.7; 6.7; 7.1; 8.6; 9.1; 10];
% Calculate TALO times for all IDs
TALO_Time = Time_Tag - To_Time;
% Preallocate
LegCol = cell(1, size(ID, 1));
color = cell(1, size(ID, 1));
% Setup cases for auto legend generation
for idx = 1:size(ID, 1)
switch ID(idx)
case 1
LegCol{idx} = 'Data-1';
color{idx} = [1 0 0]; % red
case 2
LegCol{idx} = 'Data-2';
color{idx} = [0 1 0]; % green
case 3
LegCol{idx} = 'Data-3';
color{idx} = [0 0 1]; % blue
case 4
LegCol{idx} = 'Data-4';
color{idx} = [1 0.55 0]; % orange
case 5
LegCol{idx} = 'Data-5';
color{idx} = [1 0 1]; % magenta
case 6
LegCol{idx} = 'Data-6';
color{idx} = [0 1 1]; % cyan
case 7
LegCol{idx} = 'Data-7';
color{idx} = [0 0 0]; % black
case 8
LegCol{idx} = 'Data-8';
color{idx} = [1 1 0]; % yellow
case 9
LegCol{idx} = 'Data-9';
color{idx} = [0.58 0 0.83]; % violet
case 10
LegCol{idx} = 'Data-10';
color{idx} = [0.72 0.53 0.04]; % gold
end
% Transpode LegCol and color data for legend use
Legend_Nomenclature = transpose(LegCol);
New_Colors = transpose(color);
% Setup the TALO Plot
h = plot(TALO_Time(idx), Measured_Data(idx), 'o', 'Color', New_Colors{idx}, 'MarkerSize', 14);
set(h, 'MarkerFaceColor', New_Colors{idx});
hold all;
end
AA = unique(Legend_Nomenclature);
hleg = legend(AA, 'Location', 'NortheastOutside');
The following plot is produced;
While the plotted data is correct, the corresponding legend icon colors are not. I’m getting;
Gold Data-10
Green Data-2
Blue Data-3
Orange Data-4
Gold Data-6 (should be cyan)
Cyan Data-7 (should be black)
Is there a way to automatically associate legend icon colors with the applicable data?
Thank you.
0 件のコメント
採用された回答
Sean de Wolski
2015 年 1 月 23 日
Legend has the ability to pass in specific line objects to be legend-ized. Here, you throw away those lines in the for-loop. Instead, store them and legend-ize the applicable unique ones from AA:
% <snip>
% Store h(idx), set(h(idx),...
h(idx) = plot(TALO_Time(idx), Measured_Data(idx), 'o', 'Color', New_Colors{idx}, 'MarkerSize', 14);
set(h(idx), 'MarkerFaceColor', New_Colors{idx});
hold all;
end
%%Grab unique sources and legend
[AA,idxu] = unique(Legend_Nomenclature);
hleg = legend(h(idxu),AA, 'Location', 'NortheastOutside');
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Legend についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!