Updating legend for a plot with markers and errorbar
37 次查看(过去 30 天)
显示 更早的评论
I have plotted a line plot with markers and errorbar at each data point using hold on and hold off. However, legend is only updating the marker and line symbol not errorbar. How to fix this issue ? Above is the plot what I got from the code given below.
Here is my code for the above plot:
x = 1:5;
y = 3*x;
err = std(y);
plot(x,y,'k-o','MarkerFaceColor','green')
hold on
errorbar(x,y,err,'Color','k')
hold off
legend('Data 1')
0 个评论
回答(3 个)
Sunny Choudhary
2023-6-23
Just replace the last line of code with
h = legend('Data 1', 'Error bars');
Here's the full code:
x = 1:5;
y = 3*x;
err = std(y);
% Plot the data with markers and error bars
plot(x,y,'k-o','MarkerFaceColor','green')
hold on
errorbar(x,y,err,'Color','k')
hold off
% Add legend with both markers and error bars
h = legend('Data 1', 'Error bars');
0 个评论
Deep
2023-6-23
编辑:Deep
2023-6-23
If I understand correctly, this is the output that you desire.
Here's how you can plot the fixed legend for your data. Hope this helps!
h1 = plot(x, y, 'ko-', 'MarkerFaceColor', 'g');
hold on
h2 = errorbar(x, y, err, 'k.', 'LineStyle', 'none');
hold off
legend([h1 h2], 'Data', 'Error')
0 个评论
dpb
2023-6-23
编辑:dpb
2023-6-23
x = 1:5;
y = 3*x;
err = std(y);
plot(x,y,'k-o','MarkerFaceColor','green');
hold on
errorbar(x,y,err,'Color','k');
hold off
legend('Data 1','Error')
The line and the errorbar are two separate graphics entities/objects; legend() can only display the linestyle associated with a given object so you need two text labels, one for each as you've drawn the graphic.
Perhaps you were looking for something more like
figure
err=err*ones(size(y));
hEB=errorbar(x,y,err,'ko-','MarkerFaceColor','g');
legend('Data 1','location','best')
xlim(xlim+0.5*[-1 1])
NOTA BENE:
Besides the issue of having the line and errorbar objects, the original version with a single value for the error magnitude does not match the doc errorbar that states err must be a vector matching length of y.
This usage, while certainly a reasonable extension, has some rather unexpected effects; namely errorbar then returns an array of errorbar objects, one for each point in y and thus doesn't draw a line between the points. This behavior is undoubtedly what caused the use of the otherwise unneeded use of plot(). Looks as though worthy of a bug report, at least a warning should be produced. The addition of err as the vector in the extra line above fixes the problem and then the plotted object looks like expected in legend
ADDENDUM
W/O the vector for error, the result is
figure
err=err(1); % turn err back into single value
hEB=errorbar(x,y,err,'ko-','MarkerFaceColor','g');
legend('Data 1','location','best')
xlim(xlim+0.5*[-1 1])
hEB.LineStyle
NB the array of linestyles and no line visible on plot although the legend shows it...bug!!! And, the side effect that the line through the data points is not shown because each is a separate errorbar object, not one as expected.
1 个评论
dpb
2023-6-24
ADDENDUM: I did submit bug/enhancement to TMW to cover the issue in one way or another; ideal would be to extend the syntax to accept the single error value and generate the properly-sized error vector/array internally; the minimal would be to at least warn the user of the issue.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Errorbars 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!