For a contourf plot I would like to adapt the labeling on the colorbar. I want to see the value '0', the min and max values there. These are available as variables (min,max) and should also be shown in the power representation.
c = colorbar(axes2);
Any idea?

8 Kommentare

Hello
This is rather easy if you grab the handles of what you are doing, for instance:
h0=figure(1);
h1=imagesc(randn(25));
h2=colorbar;
Now you have the handles and you can manipulate anything; the figure, the plot and in your case, the colorbar, say you want to look/change the limits you access the object like this:
>> h2.Limits
ans =
-3.0292 3.5784
And if you want to change the ticks (the position where you have the ticks), is like this
>> h2.Ticks
ans =
-3 -2 -1 0 1 2 3
The actual labels of the ticks are here:
>> h2.TickLabels
ans =
7×1 cell array
{'-3'}
{'-2'}
{'-1'}
{'0' }
{'1' }
{'2' }
{'3' }
Hope this solves your question. If it does, please accept the answer, if it does not, let me know and we can follow.
Mepe
Mepe am 4 Jun. 2020
many thanks for the answer.
I would have tried the following:
c = colorbar(axes2);
c.YTick = [0 P_min P_max];
c.YTickLabel = {'0', P_min, P_max};
P_min and P_max are variable here.
Unfortunately it doesn't work..
Adam Danz
Adam Danz am 4 Jun. 2020
I didn't understand this, "I want to see the value '0', the min and max values there. ".
Could you explain what ticks and limits you'd like to see?
Mepe
Mepe am 4 Jun. 2020
Sorry, because of the confusion. '0' should always be displayed as a fixed value. P_min and P_max are the variables that are always greater than 0.
Adam Danz
Adam Danz am 4 Jun. 2020
So you want to keep the exact same colorbar shown in your quesiton but you just want to add a tick at the very bottom with the label 0?
Mepe
Mepe am 4 Jun. 2020
Yes, the same colorbar, but the ticks are different and should be controlled with the variables. I don´t wand to see "10²". I want to see the defined values.
Thanks!
Two things:
1) Notice that YTick, just Tick the one you need.
c = colorbar(axes2);
c.YTick = [0 P_min P_max];
2) Similarly you need TickLabel, not YTickLabel
c = colorbar(axes2);
c.YTick = [0 P_min P_max];
c.YTickLabel = {'0', P_min, P_max};
I assume that P_min and P_max are the values you want to show, that is fine for Tick but for the names it can be anything, not those values, you can convert the numbers with num2str or you could write
c.TickLabel = {'0', '100','1000'};
Adam Danz
Adam Danz am 4 Jun. 2020
Since the colorscale is logarithmic, setting a tick value of 0 will have no effect becaues log10(0) = -inf.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Adam Danz
Adam Danz am 4 Jun. 2020

1 Stimme

If the colorscale in the axes is logarithmic, you can't set the lower axis limit of the colorbar to 0. You could try, and it wouldn't produce an error, but it would produce a warning and the lower limit still would not be zero. The log of 0 is -inf and a colorbar must be finite.
You could create a tick value at the very bottom of the colorbar and you could change its tick label to 0 but it's inaccurate. The actual lower tick value may be very small (ie, 10^-9) but it's not zero and depending on your colorbar range, that could be misleading.
It's better just to let the lower tick value be some small positive number that actually represents the lower limit of the colorbar.
My recommendation is to merely add the lower tick value using,
cb = colorbar(axes1); % Where axes1 is the handle to your axes.
% cb.Limits = [lower, upper]; % Set the colorbar limits if needed
cb.Ticks = unique([cb.Limits(1), P_min, P_max]);
The result would be a colorbar with tick labels that aren't in exponent format.
If you absolutely must use a tick label of 0 at the very bottom of the colorbar, use this line below. However, this could result in a very misleading representation. If you use this, set the cb.Limits(1) value to some very small number.
cb.TickLabels{1} = '0';
Note that your colorbar will still be in log scale!

4 Kommentare

Mepe
Mepe am 4 Jun. 2020
Dear Adam,
Great, it certainly doesn't make sense to want to force the value "0" in the display because of the logathmic display ...
I have one more question.
How can I change the labeling of the colorbar as an engineering notation (e.g. 10² ...)?
Thank you so much!
Assuming the ticks are floating point decmials, the line below will set the tick labels the 10^x where x has 2 decimal places (ie, 10^0.83).
cb.TickLabels = compose('10^{%.2f}',cb.Ticks)
If you want to change the number of decimal places, change %.2f to %.1f for 1dp, %.3f for 3dp, etc.
If the tick values are integers you can use %.0f or %d.
Mepe
Mepe am 4 Jun. 2020
Many thanks :-).
Adam Danz
Adam Danz am 4 Jun. 2020
Glad I could help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Contour Plots finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 4 Jun. 2020

Kommentiert:

am 4 Jun. 2020

Community Treasure Hunt

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

Start Hunting!

Translated by