MATLAB Answers

2

How do you format rotated text from clabel in MATLAB 2014b?

Asked by Ben Freireich on 7 Nov 2014
Latest activity Edited by Neill Mackay on 28 Feb 2017
The output of this code:
[C,h] = contour(peaks(1000),'r-');
clabel(C,h,'Color','r');
has changed between 2013a and 2014b. The 2013b out put would update the label color, but the line quality is poor. The 2014b gives excellent line quality, but leaves the text label color as black.
MATLAB 2013a
MATLAB 2014b
The help for 2014b says text formatting cannot be done if h is passed to clabel. However, it also (seemingly) gives no option for rotated labels if h is not passed. For example,
MATLAB 2014b with colors labels
[C,h] = contour(peaks(1000),'r-');
clabel(C,'Color','r');
Also, in 2014b clabel returns no output (handle) if h is not given as an argument. So I can't even access the handle to change formatting. I'm lost.
How can I have rotated colored labels for contours in MATLAB 2014b?
Thanks so much for help!

  0 Comments

Sign in to comment.

3 Answers

Answer by Doug Hull on 10 Nov 2014
 Accepted Answer

Sorry this took a while to get answered. I have checked with our developers to confirm and this is a known incompatibility going into R2014b. We understand the frustration when capabilities disappear. We can say that improvements to clabel are being actively discussed and this is a use case of concern to us.

  1 Comment

Thanks Doug!
That is a dissapointing answer, but at least I have an answer. It sounds like I'll have to do what I want to do here manually (i.e. w/ text and Rotate).
Is there any chance you could explain the benefit/purpose of the change to clabel?

Sign in to comment.


Answer by Mike Garrity
on 11 Nov 2014

> Is there any chance you could explain the benefit/purpose of the change to clabel?
Primary reason - Bugs. The API of changing properties on the text objects promised a lot more than it could actually deliver. Even in the simplest case of changing just the color of a text object, there were lots of problems where the contour object wouldn't realize what you'd done and mess things up. One common version of this bug was the case where you'd set the color of some of your text objects (e.g. the ones on the 0 contour level). After you got it the way you wanted it, the contour object would sometimes (e.g. during printing) decide that it could fit more labels in. When it did, it would often reuse the text objects you'd modified. It might either overwrite your colors, or worse, it might reuse the colored text objects for the labels on different levels. The result was a mess.
Secondary reason - Performance. We did a lot of work on improving the performance of contour in 14b. Wrangling those text objects was starting to become a major bottleneck. The current implementation uses a different approach.
The plan is to restore control over the label formatting with a new API which can actually deliver what it promises. Unfortunately that isn't ready yet.

  1 Comment

Appreciate these kinds of straightforward answers.

Sign in to comment.


Answer by Rob Comer
on 5 Jun 2015

You can avoid this problem, which is present in both R2014b and R2015a, using one of the workarounds available here: http://www.mathworks.com/support/bugreports/1114747. After downloading and installing the appropriate workaround, you will be able to control the appearance of contour label text with commands such as this:
clabel(C,h,'Color','red')
The workaround enables 12 properties that affect the appearance of contour labels: Color, FontName, FontSize, FontWeight, and 8 others. You will still have the benefits described in Mike's post from 11 Nov 2014.

  3 Comments

Now after I run the workaround and did the rehash toolbox cache I can't run my normal contourf any more - I get the error:
contourf(disty,gridi.depth,... nanmean(vomecrty(:,x_row,istart:iend),3),[-0.5:0.01:0.5],'LineColor','w')
Error using contourf (line 61) Method 'getLevelListImpl' is not defined for class 'matlab.graphics.chart.primitive.Contour' or is removed from MATLAB's search path.
I really need this function for my paper - so please help me I need a solution for this! By the way I work with Matlab R2015a
so both contour and contourf is not working anymore - this is really bad, I hope You have an Idea how to solve this!!!
I've just installed the same workaround for Matlab R2015a and have the same problem - contour and contourf no longer work. Please help!!

Sign in to comment.