yline disappeared after closing a saved figure when reopening

5 views (last 30 days)
Hi, I am creating a figure with multiple axis (such as subplot but manually). Part of the figure are also multiple xlines. When creating the figure with my script everything seems to work fine. I also save the figure and let the script close it automatically. When reopening the saved *.fig file the xlines disappeared and I have no clue what to try next.
fh = struct([]); % figurehandler which holds 4 axies all similar built like ax3
fh(k1).fh = figure; % k1 is a counter in a for loop
fh(k1).ax3 = axes(fh(k1).fh);
fh(k1).ax3.Position = [0.06,0.25,0.7,0.2];
fh(k1).ax3.YLim = [-1 1];
grid(fh(k1).ax3,"on");
hold(fh(k1).ax3, "on");
fh(k1).ax3.XLim = [-0.01 inf];
yyaxis(fh(k1).ax3,"left");
hold(fh(k1).ax3, "on");
linkaxes([fh(k1).ax, fh(k1).ax3], "x");
yline(fh(k1).ax3, [value1_std -value1_std],"--b","DisplayName","Value1");
yyaxis(fh(k1).ax3,"right");
hold(fh(k1).ax3, "on"); % added the holds to make sure nothing will be overwritten
yline(fh(k1).ax3, [value2_std -value2_std],"--", "Color",[0.8500, 0.3250, 0.0980],"DisplayName","Value2");
hold([fh(k1).ax,fh(k1).ax2,fh(k1).ax3,fh(k1).ax4], "off");
%saveas(fh(k1).fh,fullfile(savefolder,{sprintf('Step%d.fig', k1)})); %
%tried this but causes the same issue
savefig(fh(k1).fh,fullfile(savefolder,{sprintf('Step%d.fig', k1)}));
print(fh(k1).fh,fullfile(savefolder,{sprintf('Step%d', k1)}),"-dpng","-r400");
close(fh(k1).fh);
However when saving the figure as png the lines are there, as they were when i created the plot. Both ylines disappeared
  5 Comments
John Pausder
John Pausder on 21 Mar 2024
@Jonas as have you been able to recreate the issue? When I run your code snipped and place a breakpoint just before closing the fig, I can see the ylines. Yet, as I reopen the saved figure they are gone just as I described..
Jonas
Jonas on 2 Apr 2024
@John Pausder no, i cannot reproduce this. everything fine running on 2022a. i can see both ylines

Sign in to comment.

Answers (1)

Animesh
Animesh on 28 Feb 2024
I have been encountering a similar issue while working with “xline and “yyaxis. The only workaround I can think of is to use “line” instead ofyline”.
Here is something you can do to replicate the similar behaviour using “line”:
% Left Y-axis
yyaxis(fh(k1).ax3, "left");
hold(fh(k1).ax3, "on");
% Draw a line at y = 0.5 using the `line` function
x_values = fh(k1).ax3.XLim; % Use current x-axis limits
line(x_values, [0.5 0.5], 'LineStyle', '--', 'Color', 'b', 'Parent', fh(k1).ax3, 'DisplayName', 'Value1');
% Right Y-axis
yyaxis(fh(k1).ax3, "right");
hold(fh(k1).ax3, "on");
% Draw a line at y = 5 using the `line` function
line(x_values, [5 5], 'LineStyle', '--', 'Color', [0.8500, 0.3250, 0.0980], 'Parent', fh(k1).ax3, 'DisplayName', 'Value2');
You can refer the following MathWorks documentation for more information on "line"
  1 Comment
John Pausder
John Pausder on 21 Mar 2024
Edited: John Pausder on 21 Mar 2024
Thank you @Animesh. I also used another workaround by creating a vecotor with the length of the represented data, just as one value and plotted this. I think yours is the better option.
c_std_vec = zeros(length(data(datastart:dataend)) ,2);
c_std_vec(:,1) = data.std;
c_std_vec(:,2) = - data.std;
plot(fh(k1).ax3, timedata(datastart:dataend), c_std_v

Sign in to comment.

Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!