フィルターのクリア

Chart loses bottom and right upon resize

1 回表示 (過去 30 日間)
Mark Finn
Mark Finn 2023 年 6 月 9 日
編集済み: Mark Finn 2023 年 6 月 20 日
One of the users of our compiled MATLAB program has an issue when he resizes the main window. As the window is made larger, a chart inside the window slowly loses its bottom and right side. This does not happen with any of the similar charts in pop-up windows (each of which is created from the main window by pressing various buttons). It also does not happen if the "Scale and layout" in Windows display settings is set to 150%.
Good chart (before resize or with windows scaling 150%)
Bad chart (after resize or with windows scaling 125%)
I am a MATLAB newbie but unfortunately am required to maintain this program, so I'm pretty clueless. Please excuse any obvious ignorance on my part.
I found the following issue that apparently is a Windows 10 problem but am not sure it is the same as what I am seeing:
Here is the relevant code for the main window:
scrsz1 = get(0,'ScreenSize');
xmin=scrsz1(1)+ .01*scrsz1(3);
ymin=scrsz1(2)+ .05*scrsz1(4);
wi=.98*scrsz1(3);hi=.87*scrsz1(4);
hfig=openfig('mainWindow.fig','reuse');
set(hfig,'units','pixels')
set(hfig,'position',[xmin ymin wi hi])
set(hfig,'units','normalized')
Here is the relevant code for one of the pop-up windows:
axestagh='pictureaxis';
ha=findobj('tag',axestagh);
xlim0=get(ha,'Xlim');
ylim0=get(ha,'Ylim');
xtick0=get(ha,'XTick');
nhf=figure;
nha=copyobj(ha,nhf);
np=get(nha(1),'position');
set(nha,'position',[.12 .12 .8 .8],'tag','sep1');
set(nha,'Xlim',xlim0,'XTick',xtick0);
If the code difference does not explain this, could there be something in the differences between the .fig files that is causing it? I appreciate any help (or even an explanation) you can give.

回答 (1 件)

Shrey Tripathi
Shrey Tripathi 2023 年 6 月 14 日
編集済み: Shrey Tripathi 2023 年 6 月 14 日
The problem may be linked with the resizing of the main window. The provided code snippets do not have explicit codes to resize the chart's axes inside the main window when the window is resized, which could be the reason behind the issue.
If the chart inside the main window was created via MATLAB's GUI, then you can set the axes' unit property to "normalized". By doing so, you can utilize the position property to ensure that the chart is resized correctly upon window resizing. An example code snippet that could be used:
% Obtain chart axes handle
axesHandle = handles.chart_axes; % Replace 'chart_axes' with the correct tag for the axes object.
% Configure axes units to 'normalized'
set(axesHandle, 'Units', 'normalized');
% Set position of the axes: [left bottom width height]
set(axesHandle, 'Position', [0.1 0.1 0.8 0.8]);
% Define XLim and YLim axes properties to make sure the chart remains within the axes.
You can also use other means, such as findobj to get the handle to the axes object and subsequently set the axes properties.
As for the distinctions between the .fig files, it is difficult to determine without further information. It is plausible that the axes properties vary between the main window chart and the pop-up window charts, which could be the problem. You can analyze and compare the axes properties of both charts to detect any differences.
  1 件のコメント
Mark Finn
Mark Finn 2023 年 6 月 20 日
編集済み: Mark Finn 2023 年 6 月 20 日
Thanks for your answer. Unfortunately, it didn't help. Here is the relevant code:
%Set axes to the picture axes.
hxx=findobj(hfig,'tag','pictureaxis');
set(hxx, 'Units', 'normalized'); % I added
set(hxx, 'Position', [0.255 0.09 0.65 0.645]); % these
xlim([0.255 0.905]); ` % four
ylim([0.09, 0.735]); % lines
axes(hxx);
cla;
It works on my laptop (as it did without those additional lines of code), but the user with the Windows scaling issue still has the same resizing problem.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSpecifying Target for Graphics Output についてさらに検索

製品


リリース

R2014b

Community Treasure Hunt

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

Start Hunting!

Translated by