How to pass categorical names into dot plot and plot categorical data in for loop?
6 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Walter Roberson
2022 年 6 月 13 日
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
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!