Background Color of UIAxes
조회 수: 24 (최근 30일)
이전 댓글 표시
I am trying to use the new html style ui graphics as it looks that Matlab will soon be moving away from the Java-based graphics. With the Java-based graphics, it is possible to stack multiple axes on top of each other -- all with transparent backgrounds so as to be able to see through all the curves plotted on all the axes. This is the standard way of displaying more than 2 curves with the same x-axis but different y-axes. The commands are quite simple:
hf = figure;
ha1 = axes(hf,'Position',[0.1 0.2 0.7 0.5]);
ha2 = axes(hf,'Position',[0.2 0.25 0.7 0.5]); % This axes position is offset from previous for illustration.
set(ha2,'Color','none')
The last command makes the back of axes ha2 transparent. Now a curve in ha1 (using a plot command) will be visible together with a curve in ha2.
I have tried to do the same with the new style ui graphics both using App Designer as well as programmatically and have thus been unsuccessful. Specifically, I've used the following commands:
uihf = uifigure;
uiha1 = uiaxes(uihf,'Position',[50 50 400 300]);
uiha2 = uiaxes(uihf,'Position',[100 100 400 300]);
set(uiha2,'Color','none')
Unlike with the Java-based graphics, the last command makes the plot area transparent; but the color seen is now that specified in the BackgroundColor property of the uiaxes defined as the "Color of margin around plot area". That property does not exist for the old style axes. Apparently, when the Color property of uiaxes is set to 'none' the BackgroundColor property color is assigned to the entire area of the uiaxes object. From within App Designer, clicking on the color pull down menu of the BackgroundColor shows "None" as one of the selections, indicating that this option should be selectable (unless it's there as a placeholder for future versions). However, clicking on it generates an error message: "Cannot set UIAxes BackgroundColor to 'none'". The same error occurs, if I were to type command
set(uiha2,'BackgroundColor','none')
I searched the KB and did a general google search on this topic and found close to nothing on this topic (for typical plot commands -- I am not interested in other types of graphs/images). So, is this a known limitation of the new style graphics, or is there another way to stack multiple axes on top of each and see through all of them?
Thanks for the help.
댓글 수: 0
채택된 답변
Benjamin Kraus
2020년 11월 11일
This behavior of uiaxes has changed in MATLAB R2020b.
BackgroundColor property of UIAxes has no effect
Behavior change
Setting the BackgroundColor property on a UIAxes object no longer has any effect. The area around the plot box is transparent regardless of the value of the BackgroundColor property.
To produce the same effect as setting the background color in previous releases, create a panel with the desired BackgroundColor value, and then place the UIAxes in the panel.
댓글 수: 4
J. Alex Lee
2020년 11월 12일
Oh right, I forgot about the Color vs BackgroundColor...touche.
So the relevant update in 2020b is not the obsolecence of BackgroundColor, but finally the addition of the Color property! Great news!
추가 답변 (4개)
J. Alex Lee
2020년 1월 12일
It is possible to create a regular "axes" within a "uifigure". Can you try that and see if you can accomplish what you need? This gives the advantage that it preserves ui interactions like buttondownfcn, where uiaxes still does not.
I read in some tmw community thing (can't remember what) that uiaxes was just a wrapper for an axes in a uipanel.
댓글 수: 0
Apostolos Rigopoulos
2020년 1월 14일
댓글 수: 3
Benjamin Kraus
2020년 11월 11일
There are no plans to remove the 'axes' object. You can safely use it in your "new html-based style" apps.
J. Alex Lee
2020년 11월 11일
Benjamin, thanks for clarifying that it is safe to use axes in the html-styled apps!
I haven't checked in 2020b, but as of 2019b, the appdesigner does complain when it seems plot-like commands with a first argument that isn't a uiaxes.
Martin Dunda
2020년 3월 23일
Ah thanks you started this topic, I investigated today how much efforit it would be changing to App Designer and I pretty fast came to this limitation which prevents me from moving my GUIs. I am on R2019b and just looked in the R2020 changelog but couldn't find anything. Has anyone tried if that prbolem still persists with R2020a?
댓글 수: 3
Martin Dunda
2020년 3월 24일
편집: Martin Dunda
2020년 3월 24일
Thanks for your help Alex. You were clear the first time (although i didn't get that axes object work in web apps aswell), I just had the same uncertain feeling that the axes() are maybe not allowed for much longer, who knows. I just hoped Mathworks allowed the 'none' Background Color property in the latest version.
J. Alex Lee
2020년 3월 24일
Yea, I'm also uneasy and a bit frustrated at TMW's tight control over seemingly benign or straightforward properties, but I don't pretend to know all the considerations!
Another work-around could be to expose the underlying matlab.graphics.axis.Axes object of the uiaxes
uax = uiaxes();
S = struct(uax);
ax = S.Axes % or S.Axes_I? they seem to be the same...
ax.Color = "none"
seems to work. I'm sure this is just as "forward incompatible" as the other option, but at least you get to keep your UIAxes and all its features/capabilities as well. I'm no expert, but it seems more likely to produce conflicts when you want to mix and match features/capabilities of both at the same time.
junziyang
2020년 6월 10일
It's not wise to abandon GUIDE when the new APP Desinger is still so immature. New components related to the uifigure have many different propertie names and different behavor, like the one menthioned in this post. It's VERY frastrating to use Figure in MATLAB and UIFigure in APP Desinger. The two sets of graphics ought to be unified in the future.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Develop uifigure-Based Apps에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!