Plot multiple conditions in same figure using for and if loop.

조회 수: 6 (최근 30일)
Cate may
Cate may 2020년 10월 26일
댓글: Cate may 2020년 10월 26일
Hi,
I would like to plot the total cases against days tracked for the 6 countries mentioned in key_locations. The code currently only works and plots for a single country because strcmp can only compare two strings, but I would like to compare 6 strings (one for each country) to the cell data and plot the graphs all on the same figure. This is what I've written so far and a sample of the excel sheet is attached.
Thank you
covid_data = readtable('owid-covid-data.xlsx');
key_locations = ["Australia" "China" "India" "Indonesia" "Malaysia" "Vietnam"];
Location = covid_data(:,3);
CC = table2cell(Location); %converts table to cell array
CC1 = table2cell(covid_data);
[R C] = size(covid_data);
for i = 1:R
if strcmp(CC(i),key_locations(1));
totalcases(i)=cell2mat(CC1(i,6));
daystracked(i) = cell2mat(CC1(i,5));
newcases(i) = cell2mat(CC1(i,7));
end
end
totalcases(totalcases == NaN) = []; %NaN is currently undefined
daystracked(daystracked == NaN) = [];
newcases(newcases == NaN) = [];
figure(1)

채택된 답변

Cris LaPierre
Cris LaPierre 2020년 10월 26일
편집: Cris LaPierre 2020년 10월 26일
You might as well keep your data in a table. Coverting it to a cell array doesn't help you.
Creating your plot can be done quite simply using the ismember function and gscatter.
covid_data = readtable('owid-covid-data.xlsx');
key_locations = ["Australia" "China" "India" "Indonesia" "Malaysia" "Vietnam"];
% Find reports for key_locations
Location = ismember(covid_data.location,key_locations);
% Plot data for key_locations. Group by country.
gscatter(covid_data.days_tracked(Location),covid_data.total_cases(Location),covid_data.location(Location))
  댓글 수: 4
Cris LaPierre
Cris LaPierre 2020년 10월 26일
The plot function does not have a grouping option. If you just replaced gscatter with plot, you should get an 'Invalid data argument' error. Otherwise, be sure to reference the table variables the same way I have - tableName.variableName.
There are a couple ways to do this. I would try using findgroups and splitapply, but you could also use a for loop if you want.
covid_data = readtable('owid-covid-data.xlsx');
key_locations = ["Australia" "China" "India" "Indonesia" "Malaysia" "Vietnam"];
% Find reports for key_locations
Location = ismember(covid_data.location,key_locations);
% Identify groups in the data
G = findgroups(covid_data.location(Location));
% Plot each group
figure
hold on
splitapply(@plot,covid_data.days_tracked(Location),covid_data.total_cases(Location),G);
hold off
legend(key_locations)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

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

Community Treasure Hunt

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

Start Hunting!

Translated by