plot multiple data from excel with legend

조회 수: 1 (최근 30일)
Yuktha Andie Ravinthiran
Yuktha Andie Ravinthiran 2022년 2월 17일
답변: Rahul 2024년 11월 8일
p2 = 'filename.xlsx'
hold on
x1 = xlsread(p2,'1','E2:E37');
y1 = xlsread(p2,'1','C2:C37');
%..... other x and y data
x10 = xlsread(p2,'1','E326:E361');
y10 = xlsread(p2,'1','C326:C361');
eplot = plot(x1,y1,'r-.',x2,y2,'y',x3,y3,'g',x4,y4,'c',x5,y5,'b',x6,y6,'m',x7,y7,x8,y8,x9,y9,x10,y10);
legend('1','2','3','4','5','6','7','8','9','10')
hold off
Is there a way to specify all my x data is from E2:E361 but still make it plot 10 different lines by specifying the range of each line's number of x values
I would like to use 1:length(line colour) but don't know how it works
I also can't change the colour of a line to orange even after using the hexdecimal for it eventhough I use R2021a
eplot = plot(x1,y1,'r-.',x2,y2,'#D95319')

답변 (1개)

Rahul
Rahul 2024년 11월 8일
To achieve the desired plot after reading data from an ‘xlsx’ file, you can use the 'readmatrix' function with 'Sheet' argument while obtaining the entire range of x and y data. Here is an example:
p2 = 'filename.xlsx'
x_data = readmatrix(p2, 'Sheet', 1, 'Range', 'E2:E361');
y_data = readmatrix(p2, 'Sheet', 1, 'Range', 'C2:C361');
Then you can define the number of points per line and cell arrays to hold the data.
points_per_line = 35; % Adjust this based on your specific data
x_lines = cell(1, 10);
y_lines = cell(1, 10);
Then using a loop you can populate the cell array sequentially.
for i = 1:10
start_idx = (i - 1) * points_per_line + 1;
end_idx = i * points_per_line;
x_lines{i} = x_data(start_idx:end_idx);
y_lines{i} = y_data(start_idx:end_idx);
end
Finally you can make use of 'Color' and 'Linestyle' properties of 'plot' function to correctly define colors of each data range and style. Here is an example:
hold on
colors = {'r', 'y', 'g', 'c', 'b', 'm', '#D95319', 'k', 'b', 'm'};
lineStyles = {'-.', '-', '-', '-', '-', '-', '-', '-', '-', '-'};
for i = 1:10
plot(x_lines{i}, y_lines{i}, 'Color', colors{i}, 'LineStyle', lineStyles{i});
end
legend('1', '2', '3', '4', '5', '6', '7', '8', '9', '10');
hold off
You can refer to the following MathWorks documentations to know more about these functions:
Hope this helps! Thanks.

카테고리

Help CenterFile Exchange에서 Legend에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by