Figure export as .svg ends in .svg including a image

22 vues (au cours des 30 derniers jours)
Michael
Michael le 22 Oct 2025 à 11:00
Commenté : dpb le 22 Oct 2025 à 15:40
Dear all,
today I ran into a “bug” I can’t solve and was wondering if anyone else has seen this before.
Here’s the situation: the full code works fine, and the figure displays exactly as expected. However, when I save the figure as an .svg file and open it in Inkscape, I lose editability — instead of individual elements, I just get - a sheep in a wolf's clothing - three layers, with the last one being a single image.
hold on
p = plot(range,abs(ifft_AB(:,1:9));
Name= ["-20 Names-"];
for i = 1:length(p)
set(p(i),DisplayName = Name(i), Color = col.Values(i,:),LineWidth=2)
end
plot(range,abs(ifft_AB(:,end)),Color=col.Values(i+1,:),DisplayName="XY",LineWidth=2)
After some testing, I found that the issue appears when I add a second plot() function. As soon as I include another plot command, the exported SVG turns into an image instead of keeping the editable vector elements. (Filename still is .svg!!) The first plot() with nine lines works perfectly. Restarting the machine and trying again gives the same result.
Has anyone experienced this before? Could this be related to how MATLAB handles multiple plot calls in SVG export, or is it a machine/driver issue? Could someone confirm the "bug"?
I’m using MATLAB 2023b, so I’m not sure if the problem still exists in the latest version.
Best regards
Michael
Here the full ploting part:
load_colors():
function [colorsShort, colorsLong] = load_colors()
% Short: struct Names, Values; colors are the basic one from the RUB
% Long: struct Names, Values; short plus some additional one
%% Begining plotting
%RUB used colors
rubblue=[0,55,90]/255;
rubgreen=[139,172,52]/255;
rubgrey=[127,127,127]/255;
rubyellow=[255,204,0]/255;
rubred=[183,30,63]/255;
rubdarkred = [183, 30, 63]/255;
rubbeige = [193, 186, 164]/255;
rubdarkgreen=[140, 135, 82]/255;
rubbrown=[156, 85, 22]/255;
rubdarkbrown=[89, 33, 28]/255;
colorsShort = struct();
colorsShort.Names = ["rubblue";"rubgreen";"rubgrey";"rubyellow";"rubred";"rubdarkred";...
"rubbeige";"rubdarkgreen";"rubbrown";"rubdarkbrown"];
colorsShort.Values = [rubblue;rubgreen;rubgrey;rubyellow;rubred;rubdarkred;...
rubbeige;rubdarkgreen;rubbrown;rubdarkbrown];
% if 10 coulors are not enough, some addition
black = [0 0 0]/255;
darkblue = [0 0 128]/255;
darkred = [153 0 0]/255;
darkgreen = [0 100 0]/255;
magenta = [204 0 153]/255;
orange = [204 102 0]/255;
grey = [129 129 129]/255;
red =[1 0 0];
blue=[0 0 1];
cyan= [0 1 1];
green=[0 1 0];
colorsLong = struct();
colorsLong.Names = ["rubblue";"rubgreen";"rubgrey";"rubyellow";"rubred";"rubdarkred";...
"rubbeige";"rubdarkgreen";"rubbrown";"rubdarkbrown";"black";"darkblue";...
"darkred";"darkgreen";"magenta";"orange";"grey";"red";"blue";"cyan";"green"];
colorsLong.Values = [rubblue;rubgreen;rubgrey;rubyellow;rubred;rubdarkred;...
rubbeige;rubdarkgreen;rubbrown;rubdarkbrown;black;darkblue;...
darkred;darkgreen;magenta;orange;grey;red;blue;cyan;green];
end
col = load_colors();
% figure configuration
fig = figure(1);
pause(0.5); % shor breake to build the figure
set(fig, 'WindowState', 'maximized'); % maximise the figure to screen dimensions
% general plot
hold on
p = plot(range,abs(ifft_AB(:,1:9)));
Name = ["300 mm","377 mm","455 mm","533 mm","611 mm","688 mm","766 mm",...
"844 mm","922 mm","1000 mm","3500 mm","1500 mm","2500 mm","1000 mmV2","1000 mmV3","3500 mmV3","1500 mmV3","2500 mmV3","2000 mmV3","3000 mmV3","Without Plate"];
for i = 1:length(p)
set(p(i),DisplayName = Name(i),Color=col.Values(i,:),LineWidth=2)
end
plot(range,abs(ifft_AB(:,end)),Color=col.Values(i+1,:),DisplayName="Without Plate",LineWidth=2)
% properties of current figure
grid on
box on
set(gca,'linewidth',2.5,'TickLabelInterpreter','latex')
ax = gca;
ax.YLim = [0 0.025]
ax.XLim = [0 1.5];
ax.FontSize = 35;
ax.XAxis.FontSize = 30;
ax.YAxis.FontSize = 30;
% labeling
xlabel('Distance in [m]','Interpreter','latex')
ylabel('|S11|','Interpreter','latex')
title('\textbf {Simulated reflection coefficient of a antenna-plate szenario}','Interpreter','latex');
subtitle(['Antenna influence substracted from plate results; distance offset of antenna (0.054m) retained'],'FontSize',28);
lgd = legend('Location','northeast','NumColumns',2,'FontSize',20,'Interpreter','latex');
title(lgd,'Plate distance')
%Set clasical Marker from MATLAB
%Plate05m = findobj(gcf, "DisplayName", "Without Plate");
%datatip(Plate05m,0.0539,0.022);
% Plate1m = findobj(gcf, "DisplayName", "300 mm");
% datatip(Plate1m,0.2698,0.00658);
% Plate1_5m = findobj(gcf, "DisplayName", "377 mm");
% datatip(Plate1_5m,0.3777,0.00499);
% Plate2m = findobj(gcf, "DisplayName", "455 mm");
% datatip(Plate2m,0.4856,0.00335);
% Plate3m = findobj(gcf, "DisplayName", "533 mm");
% datatip(Plate3m,0.62057,0.00250);
% --- Save as svg --- %
%Asking the user for the name before saving
prompt = 'Enter a name for saving:';
tit = 'Save Name';
defaultName = 'myData';
answer = inputdlg(prompt, tit, [1 50], {defaultName});
if isempty(answer)
disp('User cancelled');
return;
end
saveName = answer{1};
fprintf('User entered name: %s\n', saveName);
saveas(fig, [saveName,'.svg']);
clear p fig ax lgd
  3 commentaires
Michael
Michael le 22 Oct 2025 à 11:51
done, the data and the function are uploaded
dpb
dpb le 22 Oct 2025 à 15:40
Have you tried exportgraphics as an alternative?

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Printing and Saving dans Help Center et File Exchange

Produits


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by