FontSize for the image's legend

1 Ansicht (letzte 30 Tage)
Julián Francisco
Julián Francisco am 21 Nov. 2011
I have the following code:
X = 0:pi/100:0.25*pi;
Y1 = sin(X);
Y2 = cos(X);
Y3 = tan(X);
fh = figure('toolbar','none','menubar','none','Units','characters');
Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',...
'Panel1');
Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',...
'Panel2');
haxes = axes('Parent',Pan2,'Units', 'normalized','Position',...
[0.125 0.1 0.75 0.75]);
hplot = plot(haxes,X,Y1,X,Y2,X,Y3);
xlabel(haxes,'Time (second)');
ylabel(haxes,'Amplitude (meter)');
title(haxes,'Trigonometric functions');
Ley = {'Sine function','Cosine function','Tangent function'}; %# legend's strings values
legend(haxes,Ley,'Location','SouthOutside');
[FileName,PathName,FilterIndex] = uiputfile('*.bmp;*.png;*.jpg;*.tif','Save as');
ftmp = figure('Menu','none','Toolbar','none','Units','normalized',...
'Position',[-1000 -1000 1 1]);
set(gcf,'PaperPositionMode','auto');
set(gcf,'InvertHardcopy','off');
new_axes = copyobj(haxes, ftmp);
legend(new_axes,Ley,'Location','SouthOutside','FontSize',8);
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
fmtgraf = {'-dbmp','-dpng','-djpeg','-dtiff'};
fmt = fmtgraf{FilterIndex};
print(ftmp,fmt,FileName,'-r0');
delete(ftmp);
delete(fh);
As seen in the code, the command line
legend(new_axes,Ley,'Location','SouthOutside','FontSize',8);
is run before the command line
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
Because of it, the image appears cutted by its low part as seen here (independently of the existence or no existence of the property/value 'FontSize')
If the command line
legend(new_axes,Ley,'Location','SouthOutside','FontSize',8);
is run after the command line
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
now the image is cutted by its low part but in this case it is not seen neither the xlabel text nor the legend box (as seen here)
If `'FontSize',8` is suppressed, all is Ok. How can I fix this if I want that the legend to have a lesser size?
  2 Kommentare
Walter Roberson
Walter Roberson am 21 Nov. 2011
"the image file does not appear drawn correctly" is too vague for us to work with.
Julián Francisco
Julián Francisco am 23 Nov. 2011
@Walter Roberson: I am sorry for my poor explanation. I have already fixed it (I have edited the question and I have added some images to improve it).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Daniel Shub
Daniel Shub am 22 Nov. 2011
If I understand correctly. You set the legend to be outside the figure, then set its text size, and then rescale the axis.
legend(haxes,Ley,'Location','SouthOutside');
legend(new_axes,Ley,'Location','SouthOutside','FontSize',8);
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
You are now upset that 0.1 normalized units does not provide enough space for a legend with 8 point font. There simply is not enough space to position everything optimally. What do you want MATLAB to do? Have you tried
set(new_axes,'Units','normalized','Position',[0.4 0.4 0.2 0.2]);
You might want to try one of the legend function on the FEX. Maybe http://blogs.mathworks.com/pick/2011/02/11/create-multi-column-plot-legends/
  2 Kommentare
Julián Francisco
Julián Francisco am 22 Nov. 2011
@Daniel: Thank you for your answer and link. I was thought of multicolumn plot legends but I am not sure if it was possible with Matlab.
Julián Francisco
Julián Francisco am 23 Nov. 2011
@Daniel: I have done some proofs with the code and I have edited my question to include them. I think (although I am not sure) my problem has two causes: my widescreen size and the change of the property 'FontSize'. Respect to the latter, the Matlab documentation help says that "The font size and font name for the legend strings match the axes FontSize and FontName properties". So, if I change it through the command legend, then the axes' FontSize also changes.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan
Jan am 22 Nov. 2011
I do not see any problems using Matlab 2009a.
The posted code seems to be more complicated than necessary. Are the UIPANELs required to reproduce the problem?
  2 Kommentare
Julián Francisco
Julián Francisco am 23 Nov. 2011
@Jan Simon: Thank you for your comment. Yes, the uipanels are necessary. I have just added two images to the question in order to improve my explanation.
Julián Francisco
Julián Francisco am 23 Nov. 2011
@Jan Simon: I have done some proofs with the code and I have edited my question to include them. I think (although I am not sure) my problem has two causes: my widescreen size and the change of the property 'FontSize'. Respect to the latter, the Matlab documentation help says that "The font size and font name for the legend strings match the axes FontSize and FontName properties". So, if I change it through the command legend, then the axes' FontSize also changes.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by