Some legend properties are reset to default when printing figure

11 views (last 30 days)
Rodeo Ryan
Rodeo Ryan on 17 Mar 2014
Commented: Dan Fries on 22 May 2020
I am printing a figure into the -depsc format using the print() command. The figure has two subplots, with a legend in the upper plot. An example of the code I'm using to generate the plot is below:
figure1=figure;
set(gcf,'Position',[100 100 1100 650])
set(gcf,'PaperPositionMode','auto','DefaultAxesFontname','TimesNewRoman')
subplot1=subplot(2,1,1,'Parent',figure1,'FontSize',12);
hold(subplot1,'all');
box(subplot1,'off');
plot(x1,y1,'Parent',subplot1,'Color','k','LineStyle','-','DisplayName','Field')
plot(x2,y2,'Parent',subplot1,'Color','k','LineStyle','--','DisplayName','Model')
subplot2=subplot(2,1,2,'Parent',figure1,'FontSize',12);
hold(subplot2,'all');
box(subplot2,'off');
plot(x3,y3,'Parent',subplot2,'Color','k','LineStyle','-')
plot(x4,y4,'Parent',subplot2,'Color','k','LineStyle','--')
legend1=legend(subplot1,'show');
set(legend1,'Location','NorthWest','EdgeColor',[1 1 1],'Color',[0.5 0.5 0.5]);
Then, to print the figure in color eps format, I use the following command:
print(figure1,'-depsc','-r300','Figure1.eps');
The problem is that, even though I specify 'EdgeColor' [1 1 1] and 'Color' [0.5 0.5 0.5] in the Legend properties, these are not honored when printing. The EdgeColor in the printed file is black and the background Color of the legend is reset to white. But for some reason, the property setting the Location to NorthWest is honored and NOT reset to the default, NorthEast.
I thought maybe it was only honoring the first property for some reason, so I deleted the Location property, making the EdgeColor property the first one in the list. However, the EdgeColor in the printed .eps file was still black...
Anybody know the solution to this problem? Is this an unnoticed/unresolved bug?? I am using Matlab_R2013a, in case that makes any difference in solving this problem.
Thanks!
  3 Comments
Dan Fries
Dan Fries on 22 May 2020
I am having the same issue. Is there any way to work around this or fix it?

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 22 May 2020
I think you seeing the effect of InvertHardcopy figure property; https://www.mathworks.com/help/matlab/ref/matlab.ui.figure-properties.html#buiwuyk-1-InvertHardcopy
  1 Comment
Dan Fries
Dan Fries on 22 May 2020
Thanks for looking into this. Unfortunately, even setting InvertHardcopy to 'off' does not help. The rough code I am using is below. The moment "print" is called the linestyle oin the legend is reverted to default, i.e. from '-' to '--', but I would like it to be '-' in the legend.
Any ideas?
figure
fig1 = gcf;
fig1.Units = 'inches';
size_width = 8;
size_height = 4;
fig1.Position = [5 0 size_width size_height];
hold on
a = plot(x1,y1,'--');
b = plot(x2,y2,'--');
c = plot(x3,y3,'--');
d = plot(x4,y4,'--');
[hLgd, oLgd] = legend([a b c d],{'X1' 'X2' 'X3' 'X4'},'Location','Southeast');
lineh = findobj(oLgd,'type','line');
set(lineh,'LineStyle','-')
cd(saveDir)
figure(fig1)
set(gcf,'InvertHardcopy','off')
fig1.PaperUnits = 'inches';
fig1.PaperPosition = [0 0 size_width size_height];
fig1.PaperPositionMode = 'manual';
fig1.PaperSize = [size_width size_height];
print(fig1,'FigureTest','-depsc','-r300')
print(fig1,'FigureTest','-dpdf','-r300')
print(fig1,'FigureTest','-dpng','-r300')
savefig('FigureTest')

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!