필터 지우기
필터 지우기

How to draw a line in a bar chart in complete x area

조회 수: 4 (최근 30일)
Richard
Richard 2024년 3월 31일
편집: Voss 2024년 4월 1일
Is there a way to make the horizontal line start from the very left and go to the very right? It's only going from the first x-marker to the last x-marker.
my code:
cat=categorical({'a','b','c'})
data = [37.6 24.5 14.6]';
errhigh = [2.1 4.4 0.4];
errlow = [4.4 2.4 2.3];
bar(cat,data)
hold on
er = errorbar(cat,data,errlow,errhigh);
er.Color = [0 0 0];
er.LineStyle = 'none';
hold off
line(xlim,[20 20])
output diagramm:
Thanks.

답변 (2개)

Voss
Voss 2024년 3월 31일
cats=categorical({'a','b','c'})
cats = 1x3 categorical array
a b c
data = [37.6 24.5 14.6]';
errhigh = [2.1 4.4 0.4];
errlow = [4.4 2.4 2.3];
bar(cats,data)
hold on
er = errorbar(cats,data,errlow,errhigh);
er.Color = [0 0 0];
er.LineStyle = 'none';
hold off
% force graphics to update so XLim is accurate
drawnow()
% prevent auto-updating of XLim when new line is made
set(gca(),'XLimMode','manual')
% make the new line
line([0 numel(cats)+1],[20 20])
I changed the variable cat to cats, since cat is the name of an important built-in function.
  댓글 수: 2
Richard
Richard 2024년 3월 31일
I tried your code. It still gives me the line only from the middle of the bars.
Is there a setting or something for this?
Voss
Voss 2024년 3월 31일
편집: Voss 2024년 4월 1일
The line goes all the way across when I run it on my desktop (R2023b). See below:

댓글을 달려면 로그인하십시오.


Star Strider
Star Strider 2024년 3월 31일
The easiest option is to use the yline function —
cat=categorical({'a','b','c'})
data = [37.6 24.5 14.6]';
errhigh = [2.1 4.4 0.4];
errlow = [4.4 2.4 2.3];
bar(cat,data)
hold on
er = errorbar(cat,data,errlow,errhigh);
er.Color = [0 0 0];
er.LineStyle = 'none';
hold off
yline(20) % Use 'yline'
The Run feature is not working for some reason just now, ot it woudl be possible to demonstrate this here.
.
  댓글 수: 2
Richard
Richard 2024년 3월 31일
Thank you. Is there a different method? I want to make the line only appear in certain areas of x-values.
Star Strider
Star Strider 2024년 3월 31일
My pleasure!
You can do something like this —
cat=categorical({'a','b','c'})
data = [37.6 24.5 14.6]';
errhigh = [2.1 4.4 0.4];
errlow = [4.4 2.4 2.3];
bar(cat,data)
hold on
er = errorbar(cat,data,errlow,errhigh);
er.Color = [0 0 0];
er.LineStyle = 'none';
% plot([0 1], [1 1]*20) % Added
plot([0 1; 2 3; 4 5].', ones(3,2).'*20) % All-In-One
hold off
however the placement requires a bit of experimentation, since numeric values of the ‘x’ axis aren’t precisely defined here. (The return from an xlim call is [a c] for example.) If you want them all on the same y-value, you can combine them as in the ‘All-In-One’ plot call, otherwise, it might be easier to use separate plot calls, similar to the commented-out version.
.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Discrete Data Plots에 대해 자세히 알아보기

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by