我试图在Matlab中添加一个包含Latex中符号的图例。当我绘制图形时,图例看起来很好。但是,当我将图形导出为PDF时,图例会将空格放入其中。我不知道为什么会这样。示例代码如下:
set(groot,'defaultLineLineWidth',2,'defaultAxesFontSize',...
12,'defaultAxesFontName','timesnewroman',...
'defaulttextinterpreter','latex')
x0 = 8;
y0 = 5;
width = 5;
height = 4;
kappa1 = 0.1;
kappa2 = 0.5;
f = linspace(0,2*pi,1000);
y1 = sin(f+kappa1*f.^2);
y2 = sin(f+kappa2*f.^2);
figure(1)
hold on
plot(f,y1,'k')
plot(f,y2,'b')
xlabel('Frequency (MHz)')
ylabel('Amplitude')
legend(strcat('\kappa = 0.1 MHz/','\mu','s'),...
strcat('\kappa = 0.5 MHz/','\mu','s'))
grid on;
set(gcf,'units','inches','Position',[x0,y0,width,height],...
'PaperPositionMode','Auto','PaperUnits','Inches',...
'PaperSize',[width, height]);
saveas(gcf,'legendtest.pdf')
将文件另存为PDF时,似乎发生了错误。它保存为JPG就好了。以下是我得到的两张照片。 jpg是:
但我得到的PDF是:
我在运行OS 10.12.5的Mac上使用Matlab版本R2017a。在此先感谢您的帮助!
答案 0 :(得分:6)
这是一个已知的错误。请参阅bug report,因为它会影响从R2014b到R2017a的版本。该错误报告中还建议了一种解决方法,即通过将Renderer
设置为opengl
来生成pdf文件,即
set(gcf,'Renderer','opengl');
但是生成的pdf文件包含像素图形而不是矢量图形。
更好的方法是使用相应的unicode值来生成矢量图形。即。
legend([char(954), ' = 0.1 MHz/',char(956),'s'],...
[char(954), ' = 15 MHz/',char(956),'s']); %char(954) equals 'κ', char(956) equals 'μ'
如果您想使用斜体字符,也可以使用unicode字符。
legend([char([55349,57093]), ' = 0.1 MHz/',char([55349,57095]),'s'],...
[char([55349,57093]), ' = 15 MHz/',char([55349,57095]),'s']);
%char([55349,57093]) equals '' (italic κ), char([55349,57095]) equals '' (italic μ)
答案 1 :(得分:5)
另一种解决方法是使用Latex解释整个图例文本:
$
它需要一些基本的乳胶知识,例如你必须用strcat
包裹所有数学符号(kappa,mu),并注意是否要使用任何特殊的非英语字符。稍微改变了图例的外观,但可以说是更好。
顺便说一下,你可以跳过h = legend('$\kappa$ = 0.1 MHz/$\mu$s',...
'$\kappa$ = 0.5 MHz/$\mu$s')
set(h,'Interpreter','latex')
,它没有任何用途。
{{1}}
同样适用于非乳胶版本。