直方图图例中有多行

时间:2017-01-21 13:15:24

标签: matlab histogram legend

我正在尝试使用由两行组成的图例绘制直方图。 运行以下代码会导致错误:

  

使用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

1 个答案:

答案 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'); 

但那只是美学。