Match name to axis value in chart

조회 수: 2 (최근 30일)
shamal
shamal 2025년 3월 16일
답변: Star Strider 2025년 3월 16일
load('matlab_pl.mat')
stem(pl(:,2))
ff= find(pl(:,2));
ax = gca;
ax.XTickLabel=pl(ff,1);
hi, i see that the name axis not corrisponding on axis value <>0
and if possibile to avoid overlapping I would like to write the number under its own bar as in the example

채택된 답변

Star Strider
Star Strider 2025년 3월 16일
Apparently, you want to put all the labels in the negative part of the y-axis.
Try this —
load('matlab_pl.mat')
stem(pl(:,2))
ff= find(pl(:,2));
ax = gca;
% ax.XTickLabel=pl(ff,1);
ylim('padded')
xval = ff;
tval = pl(ff,1);
yval = pl(ff,2);
lval = zeros(size(yval)); % Label Positions
lval(yval<0) = yval(yval<0); % Label Positions
lval(yval>0) = yval(yval>0)-max(yval(yval>0)); % Label Positions
text(xval, lval-0.02, compose('%d',tval), Horiz='center', Vert='top', FontSize=9, FontWeight='bold')
Make appropriate changes to get the result you want.
.

추가 답변 (1개)

Image Analyst
Image Analyst 2025년 3월 16일
How about this:
load('matlab_pl.mat')
x = pl(:, 1);
y = pl(:, 2);
stem(x, y, 'Filled', 'LineWidth', 2);
grid on;
xticklabels("")
bigStemIndexes = find(y ~= 0);
for k = 1 : length(bigStemIndexes)
xs = x(bigStemIndexes(k));
ys = y(bigStemIndexes(k));
if ys > 0
str = sprintf('%d\n', xs);
text(xs, ys, str, ...
'HorizontalAlignment','center',...
'VerticalAlignment','bottom', 'FontWeight','bold')
else
str = sprintf('\n%d', xs);
text(xs, ys, str, ...
'HorizontalAlignment','center',...
'VerticalAlignment','top', 'FontWeight','bold')
end
end

카테고리

Help CenterFile Exchange에서 Annotations에 대해 자세히 알아보기

제품


릴리스

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by