Format scientific decimal place bar plot
이전 댓글 표시
Hello there,
I want to make a data tip of the bar plot appeared in scientific format with one decimal place (example: 2.1x10^-3 instead of 0.0021). Anyone can help?
Here is my code so far, and please find the datasets attached:
load('data_c.mat');
x = unique_stations';
vals = [means_ep; means_kzo];
b = bar(x,vals);
set(gca,'yscale','log');grid on; box on;
xtips1 = b(1).XEndPoints;ytips1 = b(1).YEndPoints;
xtips2 = b(2).XEndPoints;ytips2 = b(2).YEndPoints;
labels1 = string(b(1).YData);labels2 = string(b(2).YData);
text(xtips1,ytips1,labels1,'HorizontalAlignment','center','VerticalAlignment','bottom') % should be adjusted here, I think
text(xtips2,ytips2,labels2,'HorizontalAlignment','center','VerticalAlignment','bottom') % should be adjusted here, I think
legend('mean e','mean kz');
I want this version:

Thank you!
채택된 답변
추가 답변 (2개)
Shashi Kiran
2024년 11월 10일
To display data tips in scientific notation with one decimal place on your bar plot, you can format the labels1 and labels2 variables by converting the YData values into strings with scientific notation.
In MATLAB, the "num2str" function can achieve this formatting. Here is how to adjust your code:
% Format labels in scientific notation with one decimal place using num2str
labels1 = num2str(b(1).YData', '%.1e'); % Transpose to column vector for num2str
labels2 = num2str(b(2).YData', '%.1e'); % Transpose to column vector for num2str

For more details about "num2str" refer to this documentation: https://www.mathworks.com/help/matlab/ref/num2str.html
Hope this helps.
load('data_c.mat');
x = unique_stations';
vals = [means_ep; means_kzo];
b = bar(x,vals);
set(gca,'yscale','log');grid on; box on;
xtips1 = b(1).XEndPoints;ytips1 = b(1).YEndPoints;
xtips2 = b(2).XEndPoints;ytips2 = b(2).YEndPoints;
labels1 = mystr(b(1).YData);labels2 = mystr(b(2).YData);
text(xtips1,ytips1,labels1,'HorizontalAlignment','center','VerticalAlignment','bottom') % should be adjusted here, I think
text(xtips2,ytips2,labels2,'HorizontalAlignment','center','VerticalAlignment','bottom') % should be adjusted here, I think
legend('mean e','mean kz');
function sc = mystr(a)
nd = floor(log10(a));
sc = arrayfun(@(x,n)sprintf('%1.1f x 10^{%d}',x,n), a./10.^nd, nd, 'unif', 0);
% EDIT: ADD CODE TO REMOVE EXPONENT WHEN IT IS EQUAL TO 1
sc = strrep(sc, ' x 10^{0}','');
end
카테고리
도움말 센터 및 File Exchange에서 Annotations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



