Overlaying scatter plot on grouped bar graphs
35 次查看(过去 30 天)
显示 更早的评论
Hi All,
I am trying to plot a grouped bar graph. Along with the bars, I also need to plot single data points on each of the bars. Additionally, I would like to connect the individual data points with each other with a line. Here is the data I would like to use. Currently, I have been able to plot the bars and the error bars. But I am unsure about plotting the single data points. Is there a way to do that?
x = 1:3;
x = categorical({'High PU-Low RU', 'Low PU-High RU', 'Low PU-Low RU'});
SEM = [0.092290761 0.08898688 0.086731951 0.0825611
0.07279865 0.077586879 0.075656197 0.076483
0.088012243 0.088217074 0.094249201 0.081997937]
y = [0.619105248 0.596942136 0.581815617 0.553836698
0.488348187 0.520468608 0.507517199 0.513063563
0.590404075 0.591778124 0.63224286 0.550058883]
all = [0.1 0.2 0.3
0.4 0.4 0.6
0.6 0.5 0.8
0.6 0.8 0.6
0.1 0.2 0.3
0.4 0.4 0.6
0.6 0.5 0.8
0.6 0.8 0.6
0.42 0.52 0.62
0.72 0.72 0.92
0.92 0.82 1.12
0.92 1.12 0.92
0.42 0.52 0.62
0.72 0.72 0.92
0.92 0.82 1.12
0.92 1.12 0.92
]
0 个评论
采纳的回答
Star Strider
2021-7-20
The ‘all’ matrix is (16x3), however there are 12 bars (3 groups of 4). Ths size of ‘all’ is not consistent with that.
How is the ‘all’ matrix to be plotted with respect to the bars? I have chosen one option here. Clarify if I guessed incorrectly.
x = 1:3;
xlbl = {'High PU-Low RU', 'Low PU-High RU', 'Low PU-Low RU'};
SEM = [0.092290761 0.08898688 0.086731951 0.0825611
0.07279865 0.077586879 0.075656197 0.076483
0.088012243 0.088217074 0.094249201 0.081997937];
y = [0.619105248 0.596942136 0.581815617 0.553836698
0.488348187 0.520468608 0.507517199 0.513063563
0.590404075 0.591778124 0.63224286 0.550058883];
all = [0.1 0.2 0.3
0.4 0.4 0.6
0.6 0.5 0.8
0.6 0.8 0.6
0.1 0.2 0.3
0.4 0.4 0.6
0.6 0.5 0.8
0.6 0.8 0.6
0.42 0.52 0.62
0.72 0.72 0.92
0.92 0.82 1.12
0.92 1.12 0.92
0.42 0.52 0.62
0.72 0.72 0.92
0.92 0.82 1.12
0.92 1.12 0.92];
figure
hBar = bar(x, y.'); % Return ,bar Handle
for k1 = 1:size(y,2)
ctr(k1,:) = bsxfun(@plus, hBar(k1).XData, hBar(k1).XOffset'); % Note: ;XOffset; Is An Undocumented Feature, This Selects The ‘bar’ Centres
ydt(k1,:) = hBar(k1).YData; % Individual Bar Heights
end
hold on
errorbar(ctr, ydt, SEM.', '.g', 'MarkerSize',1)
plot(x, all, '.-', 'LineWidth',1.5)
xticklabels(xlbl);
.
3 个评论
Star Strider
2021-7-20
My pleasure.
These data still do not match the bar plot.
I have no idea how to plot them since the sizes (number of rows in ‘all’ and the number of bars) do not match, nor do I know what result you want. The bar centres (with respect to to x-axis coordinates) are provided by the ‘ctr’ matrix, created in the loop. Once the rows in ‘all’ match the number of bars (12), you can use those data to plot the lines in a loop. Just now, I have no idea how to do that, because the numbers do not match. I also have no idea how to match the rows of ‘all’ and the bars themselves, even if the sizes matched, in order to plot the lines. Those details — what rows of ‘all’ go with what bars — have not been provided.
.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Scatter Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!