Plot connected vertical points with different marks

4 views (last 30 days)
I have a vector x=[ 1 2 3 4], and a matrix of size: 3x4.
I want to plot something like this:
Update: the number of vertical points can be different (in my example I used 3, but they can be from 2 to 5).
Update 2: "x" mark is not the center, it might happen than "x" mark is lower or higher than the other two points, for a particular x value.
Any ideas?

Accepted Answer

Star Strider
Star Strider on 20 Aug 2021
Try something like this —
x=[ 1 2 3 4];
M = rand(3,4);
Mx = max(M);
Mn = min(M);
plot(x, Mx, 'd')
hold on
plot(x, Mn, 'o')
plot([x; x], [Mx; Mn], '--k')
hold off
xlim([0 5])
.I am not certain what the ‘x’ markers in the centres of the lines represent, so I did not include them. However they could llikely be added with one plot call.

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 20 Aug 2021
Try this:
markerSize = 14;
lineWidth = 2;
x = [1 2 3 4]
y = 0.1 + 0.4 * rand(3, 4)
[rows, columns] = size(y)
for col = 1 : columns
yTop = max(y(:, col));
yBottom = min(y(:, col));
yMid = setdiff(y(:, col), [yTop; yBottom]);
% Plot line
plot([x(col), x(col)], [yBottom, yTop], 'b-', 'LineWidth', 3);
hold on;
% Plot markers
plot(x(col), yTop, 'bd', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
plot(x(col), yBottom, 'bo', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
plot(x(col), yMid, 'bx', 'LineWidth', lineWidth, 'MarkerSize', markerSize);
grid on;
Image Analyst
Image Analyst on 20 Aug 2021
Yeah, that was not specified. But it looks like you've accepted an answer so I guess you got it all figured out for the case of variable number of rows.

Sign in to comment.


Find more on Data Distribution Plots in Help Center and File Exchange


Community Treasure Hunt

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

Start Hunting!