Labels on the contour have too many digits

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

 採用された回答

Maryam
Maryam 2013 年 7 月 30 日

1 投票

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 件のコメント

Johannes S.
Johannes S. 2022 年 2 月 22 日
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.

サインインしてコメントする。

その他の回答 (4 件)

Matthew Perkins
Matthew Perkins 2018 年 9 月 10 日

13 投票

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 件のコメント

Tom Shenton
Tom Shenton 2020 年 6 月 21 日
Great elegant solution. Worked really well.
MohammadReza Jabbari (Jabari)
MohammadReza Jabbari (Jabari) 2020 年 7 月 16 日
this is worked. thanks
Zhao Shuaijie
Zhao Shuaijie 2021 年 2 月 17 日
works well !
thanks

サインインしてコメントする。

Moises Jezzini
Moises Jezzini 2016 年 9 月 12 日
編集済み: Moises Jezzini 2016 年 9 月 12 日

1 投票

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 2013 年 7 月 30 日

0 投票

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 件のコメント

Maryam
Maryam 2013 年 7 月 30 日
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 2013 年 8 月 2 日
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.

サインインしてコメントする。

mauricio misraji
mauricio misraji 2023 年 3 月 15 日

0 投票

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.

カテゴリ

ヘルプ センター および File ExchangeContour Plots についてさらに検索

タグ

質問済み:

2013 年 7 月 29 日

回答済み:

2023 年 3 月 15 日

Community Treasure Hunt

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

Start Hunting!

Translated by