Matlab Plot (axes) reset not working; traces new images on the old axis

3 views (last 30 days)
Shreedhar Savant Todkar
Shreedhar Savant Todkar on 28 Aug 2020
Edited: VBBV on 2 Sep 2020
I'm relatively new to Matlab guide UI tool.
Here is what I'm doing:
I created a multi-tab window wherein the number of tabs depend on the number of files chosen beforehand using a 'Browse' button (e.g, 5 files chosen leads to 5 tabs, etc.). Once the files are chosen, they are plotted using imagesc() on specific tabs. I then perform a zoom on specific zones of said images using a zoom button and subsequently save these files for further processing.
Code to dynamically create tabs:
function browsebutton_Callback(hObject, eventdata, handles)
global tabgp tab fullFilename ax two_D_data time_axis;
[file_names, folder] = uigetfile( ...
{'*.ASC; *.BIN', 'All data files (*.DZT, *.ASC, *.BIN)';
'*.ASC','ASCII files (*.ASC)'; ...
'*.BIN','Binary files (*.BIN)'; }, 'Pick a file', 'Multiselect', 'On');
fullFilename = fullfile(folder, file_names);
numfiles = size(file_names,2);
for k = 1 : numfiles
[image_file, time_axis, dist] = import_images(char(fullFilename(k)));
tab(k) = uitab('Parent', tabgp, 'Title',char(file_names(k)));
ax(k) = axes('Parent', tab(k));
imagesc(ax(k), 'CData', image_file, 'YData', time_axis, 'XData', dist);
xlabel(ax(k), 'Distance axis');
ylabel(ax(k), 'Time axis');
xlim([0.5 size(image_file,2)+0.5]);
ylim([min(time_axis) max(time_axis)]);
end
end
Code to update images on an active tab:
function zoombutton_Callback(hObject, eventdata, handles)
global ax tabgp tab time_axis fullFilename;
tabNumber = find(tabgp.SelectedTab == tab);
set(handles.text6, 'String', ['Calibrating data from Panel: ' num2str(tabNumber)]);
[image_file, time_axis, dist] = import_images(char(fullFilename(tabNumber)));
[max_val, min_val, idx1, idx2] = get_minmax_vals();
new_data = image_file(idx1:idx2,:);
ax(tabNumber) = axes('Parent', tab(tabNumber));
cla(ax(tabNumber), 'reset'); % Reset isn't working
imagesc(ax(tabNumber), 'CData', new_data, 'YData', time_axis(idx1:idx2));
set(ax(tabNumber), 'YDir', 'reverse');
xlabel(ax(tabNumber), 'Distance axis');
ylabel(ax(tabNumber), 'Time (s)');
xlim([0.5 size(new_data,2)+0.5]);
ylim([min(time_axis(idx1:idx2)) max(time_axis(idx1:idx2))]);
hold(ax(tabNumber), 'off');
Issue faced:
When I perform the Zoom, the images are zoomed. However, the ticks from the previous figure are not erased.
The new image, its axis labels and ticks overlap on the old image axis labels and ticks.
Am I doing something wrong here?
PS: I'm using Matlab R2016a

Answers (1)

VBBV
VBBV on 2 Sep 2020
Edited: VBBV on 2 Sep 2020
Use
delete(handles.ax(tabNumber)) guidata(hObject,handles)
In the callback function
You are declaring handle to axis ax as global which may not work sometimes and tend to create a duplicate struct in GUI. Instead access it using handles structure After defining first in opening function

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by