Labels on the contour have too many digits

74 Ansichten (letzte 30 Tage)
Maryam
Maryam am 29 Jul. 2013
Beantwortet: mauricio misraji am 15 Mär. 2023
How can I set the precision of the numbers on my contour plot? Now the clabels are like: 1.29567, I would like to have it rounded like: 1.3.
Thanks

Akzeptierte Antwort

Maryam
Maryam am 30 Jul. 2013
I have done the following and it works perfectly:
[c,h]=contourf(X,Y,H); texth=clabel(c,h,'manual','fontsize', 20); for i=1:size(texth) textstr=get(texth(i),'String'); textnum=STR2DOUBLE(textstr); textstrnew=sprintf('%0.3f', textnum) set(texth(i),'String',textstrnew); end
  1 Kommentar
Johannes S.
Johannes S. am 22 Feb. 2022
Thank you so much!! I was searching for something like this for about two days now.
Its a german thing, that you need to use a comma for decimal sep. instead of a dot and this is the best solution for the contour levels.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (4)

Matthew Perkins
Matthew Perkins am 10 Sep. 2018
I found this works. And seems much easier. I have R2015b.
[c,h]=contourf(X,Y,H);
h.LevelList=round(h.LevelList,3) %rounds levels to 3rd decimal place
clabel(c,h)
  3 Kommentare
MohammadReza Jabbari (Jabari)
this is worked. thanks
Zhao Shuaijie
Zhao Shuaijie am 17 Feb. 2021
works well !
thanks

Melden Sie sich an, um zu kommentieren.


Moises Jezzini
Moises Jezzini am 12 Sep. 2016
Bearbeitet: Moises Jezzini am 12 Sep. 2016
An update since this was the first answer in my search. This works for 2014b or above, previous solution does not work, due to a change in the way clabel works.
[X,Y,Z] = peaks;
figure;
[C, ~] = contour(X, Y, Z, 5, 'ShowText', 'on');
tl = clabel(C, 'FontSize', 10);
itvec = 2:2:length(tl);
NewCoutours = zeros(size(itvec));
for i= itvec
textstr = get(tl(i), 'String');
NewCoutours(i) = round(str2double(textstr), 2);
end
contour(X,Y,Z, NewCoutours, 'ShowText','on');
Before
After

Hugo
Hugo am 30 Jul. 2013
You could use
[C,h]=contour(...);
texth=clabel(C,h);
texth is a vector that contains the handles of all labels. To get the value in label number n you can use
textstr=get(texth(n),'String');
textstr is a string of chars, not a number, so you should do
textnum=str2num(textstr);
to convert to a number. Then you can set the precision by using
textstrnew=num2str(textstr,'%1.1g');
and then set the label to
set(texth(n),'String',teststrnew);
Hope this helps.
  2 Kommentare
Maryam
Maryam am 30 Jul. 2013
Thank you very much for your help. It does not work. This is what I have:
[c,h]=contourf(Xe,Ye,Z,30); texth=clabel(c,h,'fontsize', 20); for i=1:size(texth) textstr=get(texth(i),'String'); textnum=str2num(textstr); textstrnew=num2str(textstr,1); set(texth(i),'String',textstrnew); end
I appreciate your help. Thanks.
Hugo
Hugo am 2 Aug. 2013
It doesn't work because you wrote "textstrnew=num2str(textstr,1);" instead of what I wrote. The second input argument should be an appropriate one.

Melden Sie sich an, um zu kommentieren.


mauricio misraji
mauricio misraji am 15 Mär. 2023
You can add the option to the contour command:
"LabelFormat","%0.1f"
where 0.1 means just 1 decimal digit. For example:
contour(X,Y,Z,levels,'ShowText','on',"LabelFormat","%0.4f")
shows 4 decimal digits.

Kategorien

Mehr zu Contour Plots finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by