Borrar filtros
Borrar filtros

Labels on the contour have too many digits

47 visualizaciones (últimos 30 días)
Maryam
Maryam el 29 de Jul. de 2013
Respondida: mauricio misraji el 15 de Mzo. de 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

Respuesta aceptada

Maryam
Maryam el 30 de Jul. de 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 comentario
Johannes S.
Johannes S. el 22 de Feb. de 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.

Iniciar sesión para comentar.

Más respuestas (4)

Matthew Perkins
Matthew Perkins el 10 de Sept. de 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 comentarios
MohammadReza Jabbari (Jabari)
MohammadReza Jabbari (Jabari) el 16 de Jul. de 2020
this is worked. thanks
Zhao Shuaijie
Zhao Shuaijie el 17 de Feb. de 2021
works well !
thanks

Iniciar sesión para comentar.


Moises Jezzini
Moises Jezzini el 12 de Sept. de 2016
Editada: Moises Jezzini el 12 de Sept. de 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 el 30 de Jul. de 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 comentarios
Maryam
Maryam el 30 de Jul. de 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 el 2 de Ag. de 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.

Iniciar sesión para comentar.


mauricio misraji
mauricio misraji el 15 de Mzo. de 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.

Categorías

Más información sobre Contour Plots en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by