Overlaying scatter plot on grouped bar graphs

32 次查看(过去 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
]

采纳的回答

Star Strider
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
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.
.
Prashanti Ganesh
Prashanti Ganesh 2021-7-21
The reason for the inconsistency in the dimensions of all is because there are many data points whose avg is represented by one bar. For instance, in the following figure each bar represents the avg of the single data points overlaid on the bars. In this case, y was a matrix of 1 by 4 while all was a matrix of 50 by 4. I just want the same thing, for each of the bars, in a grouped bar graph. Even I am unsure what the dimensions of all should be like.

请先登录,再进行评论。

更多回答(1 个)

Tala
Tala 2021-7-20
编辑:Tala 2021-7-20
If I understand your question, you want to plot a few more points. just use plot(x,y,'o')
i added one point above the first bar in yellow.
  2 个评论
Prashanti Ganesh
Prashanti Ganesh 2021-7-20
Yes, I want to add a few more points. But I want to add single data points for each of these bars. How can I do that?
Prashanti Ganesh
Prashanti Ganesh 2021-7-20
Basically, I want to plot the 'all' data as scatter points on the bars.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Discrete Data Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by