How do you put lcolorbar in UIAxes (app designer)?

3 views (last 30 days)
I have a UIAxes area in an app using app designer. I want to plot some stuff colored by category using lcolorbar (colorbar with text labels) but it won't let me. The regular colorbar can be assigned to an axes by not lcolorbar. Is there a workaround?

Accepted Answer

Kevin Holly
Kevin Holly on 3 Jul 2024
Let's say I want to place this in App Designer.
[Z,R] = readgeoraster("n39_w106_3arc_v2.dt1","OutputType","double");
[vis,visR] = viewshed(Z,R,39.6,-105.6,1000);
figure
usamap(vis,visR)
geoshow(vis,visR,"DisplayType","surface")
cmap = [0.4940 0.1840 0.5560; 0.4660 0.6740 0.1880];
colormap(cmap)
h = lcolorbar(["Obscured" "Visible"]);
h.Position(1) = h.Position(1)-0.1;
Here is a workaround:
[Z,R] = readgeoraster("n39_w106_3arc_v2.dt1","OutputType","double");
[vis,visR] = viewshed(Z,R,39.6,-105.6,1000);
fig = figure;
usamap(vis,visR)
geoshow(vis,visR,"DisplayType","surface")
cmap = [0.4940 0.1840 0.5560; 0.4660 0.6740 0.1880];
colormap(cmap)
h = lcolorbar(["Obscured" "Visible"]);
h.Position(1) = h.Position(1)-0.1;
for ii = length(fig.Children):-1:1
fig.Children(ii).Parent = app.Panel;
end
app.Panel.Children(1).Colormap = cmap;
app.Panel.Children(2).Colormap = cmap;
delete(fig)
I created the graphics on a figure (named fig) and then transfered each child of the figure to the a uipanel or uifigure. In this case, I chose app.Panel. I then had to add the correct colormaps. See app attached for working example.
  5 Comments
Eric
Eric on 4 Jul 2024
I though of doing this, but the problem is for categorical there should be distinct colors in the colorbar instead of a color gradient. You can get colorbar to have distinct colors, but the ticks will appear between the colors which makes it ambiguous which label goes with which color. With lcolorbar the ticks are in the middle of the colors as they should be.
Eric
Eric on 4 Jul 2024
I tried the example_lcolorbar and this seems to do what I'm looking for. It's not the ideal solution, which would be matlab putting the axes argument in the lcolorbar so it works the same as colorbar, but it works.
If I clear/reset the uiaxes, which I have to do occasionally to set new plots, is there a way of keeping the lcolorbar object and re-associating it to a new axes and data set without reverting to spawning a new figure?

Sign in to comment.

More Answers (0)

Categories

Find more on Geographic Plots in Help Center and File Exchange

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!