Include legends based on column names in for loop

17 visualizaciones (últimos 30 días)
Vlatko Milic
Vlatko Milic el 12 de En. de 2022
Comentada: Mathieu NOE el 16 de Mayo de 2022
Hi,
I have a loop which processes three tables. Each table has ten columns (in addition, each column includes column names). When I plot the three figures in the loop, I want to include legends which state the column name of each variable within the plot. I know how to make this manually by typing the legends in the Matlab code. However, since the column names are changing depending on table I want to perform this automatically in the script. My though is to use "Display" but I do not know how to apply this kind of approach. In terms of code procedure, I thought something similar to this (not working unfortunately):
vnames=Table_.Properties.VariableNames;
for v = 1:numTables
%Processing of the code
plot(Table_.Col1,Table_{:,3},'DisplayName',vnames(v))
legend show
end
Grateful for any advice.
  1 comentario
Vlatko Milic
Vlatko Milic el 12 de En. de 2022
Thank you! I made some changes to the code and now it works for several tables.
All the best

Iniciar sesión para comentar.

Respuesta aceptada

KSSV
KSSV el 12 de En. de 2022
id = (1:10)' ;
x = rand(10,1) ;
y = rand(10,1) ;
z = rand(10,1) ;
T = table(id,x,y,z)
T = 10×4 table
id x y z __ ________ ________ ________ 1 0.60378 0.39943 0.005615 2 0.039465 0.2604 0.33861 3 0.24765 0.47166 0.71508 4 0.33116 0.064591 0.014081 5 0.87429 0.19372 0.8671 6 0.80526 0.74176 0.52277 7 0.61993 0.51138 0.34342 8 0.37336 0.11143 0.9837 9 0.73479 0.22456 0.58077 10 0.14989 0.96124 0.2604
figure
hold on
for i = 2:4
plot(T.(1),T.(i),'DisplayName',T.Properties.VariableNames{i})
end
legend

Más respuestas (1)

Mathieu NOE
Mathieu NOE el 12 de En. de 2022
hello
see my little demo below to use the table varibales names as legend
the csv data file is attached
clearvars
clc
%get the data from table
T = readtable('pH_Data.csv'); %Reads Table or CSV File
vnames=T.Properties.VariableNames; % {'DateAndTimeRun1'} {'Time_s_Run1'} {'Voltage_mV_Run1'} {'pHRun1'}
time = T.Time_s_Run1; % time (s)
data = table2array(T(:,3:end)); % data
plot(time,data);
lgstr = vnames(3:end); % use vnames to make legend strings
% legend strings convert underscore to blanks for better legend readability
for ck = 1:numel(lgstr)
tmp = char(lgstr(ck));
ind = strfind(tmp,'_');
tmp(ind) = ' ';
lgstr{ck} = tmp; % update
end
legend(lgstr);
  7 comentarios
Vlatko Milic
Vlatko Milic el 16 de Mayo de 2022
it works perfectly, thank you so much!
I had forgotten to remove some of the code I was working on, hence the comment in the code from my side.
Thank you!
Mathieu NOE
Mathieu NOE el 16 de Mayo de 2022
My pleasure !

Iniciar sesión para comentar.

Productos


Versión

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by