我正在尝试使用由两行组成的图例绘制直方图。 运行以下代码会导致错误:
使用matlab.graphics.chart.primitive.Histogram / set
时出错值单元格数组句柄维度必须与句柄向量长度匹配。
xErr = randn(1,1000);
[mu, sig] = normfit(xErr);
h = histogram(xErr, 100, 'Normalization','pdf');
% The following command causes the error
set(h_xErr, {'DisplayName'}, {['Standard deviation $\sigma_{x} = $ ', num2str(sigX)]; ['Mean $\mu_x = $ ', num2str(muX)]});
hl = legend('Location', 'NorthWest');
set(hl,'Interpreter','latex');
我还直接使用histogram命令尝试了DisplayName属性,但这也不起作用。根据{{3}},单元数组的维度也必须与错误所指出的句柄数相匹配。
我想添加另一个仍有相同错误的句柄。
h = [h; histogram(xErr, 100, 'Normalization','pdf')];
是否有一种简单的方法可以在直方图的图例中获得两行?
我正在使用Matlab R2016b
答案 0 :(得分:1)
根据DisplayName
documentation,需要在文本中添加换行符\n
,这可以通过sprintf
轻松完成。一个小而重要的复杂因素是需要转义标准LaTeX活动字符\
,因此sprintf
不认为LaTeX命令是其特殊字符之一(某些变量名称已更改以确保代码运行):
xErr = randn(1,1000);
[mu, sig] = normfit(xErr);
h = histogram(xErr, 100, 'Normalization','pdf');
set(h,...
'DisplayName',...
sprintf([...
'Standard deviation $\\sigma_{x} = $ ', num2str(sig),...
'\nMean $\\mu_x = $ ', num2str(mu)]));
hl = legend('Location', 'NorthWest');
set(hl,'Interpreter','latex');
我个人会用
xErr = randn(1,1000);
[mu, sig] = normfit(xErr);
histogram(xErr, 100, 'Normalization','pdf');
legText = {...
sprintf([...
'Standard deviation $\\sigma_{x} = %9.7f$ \n ',...
'Mean $\\mu_x = %9.7f$' ],...
[sig,mu])...
};
legend(legText,'Location', 'NorthWest','Interpreter','latex');
但那只是美学。