How to pass categorical names into dot plot and plot categorical data in for loop?
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
nines
am 13 Jun. 2022
Bearbeitet: nines
am 13 Jun. 2022
Hello!
I have a two variables for two subjects from an experiment: control and a stimulus variable and for both of these variables I get one number per stimulus and one number for the control per subject. I also have this control and stimulus changing over time. I am trying to make a scatter plot of the percent change where I plot the categorical time change
where I have tried the following:
subj_controls = {'subject1' 'subject2'}
subj_stimulus = {'subject1' 'subject2'}
time = {'40_to_50' '50_to_60'}
[labels, ~, xdata_idx] = unique(times);
[labels_controls, ~, xdata_idx_control] = unique(times);
for s = 1:length(subj_controls)
subj = subj_controls{s}
for i = 1:length(time)
time = times{i}
plot_length = 1:length(xdata_idx)*2;
ax.XTick = [plot_length]
hold on
scatter([i i+1], [percent_change_control(:,i) percent_change(:,i)]); hold off
set(gca, 'XTick', [unique(xdata_idx)], 'XTickLabels', labels); hold off
end
end
where the outcome looks as attached where the Subject 1 Control, Subject 1 Stimulus, Subject 2 Control, Subject 2 Stimulus are not in discrete areas if they are at the 40-50 time mark vs. the 50-60 time mark:
and I have the script working as follows, but I am moving to a larger dataset and do not want to be manually writing all the categorical variables for every subject:
scatter([1 2], [percent_change_control(:,1) percent_change(:,1)]
scatter([3 4], [percent_change_control(:,2) percent_change(:,2)]
ax = gca;
ax.XTick = [1,2,3,4];
ax.XTickLabels = {'Control 40-50', 'Stimulus 40-50', 'Control 50-60', 'Stimulus 50-60'}
here is an example of the image I aiming for:
Does anyone have any suggestions? Thank you.
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 13 Jun. 2022
subj_controls = categorical({'subject1' 'subject2'});
subj_stimulus = categorical({'subject1' 'subject2'});
time = categorical({'40_to_50' '50_to_60'});
for s = 1:length(subj_controls)
subj = subj_controls(s);
for i = 1:length(time)
time = times(i);
scatter(time, [percent_change_control(:,i) percent_change(:,i)]);
hold on
end
end
At the moment, I do not see why you are looping over subj_controls since you seem to be doing the same thing for every subj
1 Kommentar
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Data Distribution Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!