来自单元格的 Matlab 图例,用于使用 for 循环创建的绘图

Posted

技术标签:

【中文标题】来自单元格的 Matlab 图例,用于使用 for 循环创建的绘图【英文标题】:Matlab legend from cell for plot created with for-loop 【发布时间】:2019-12-25 03:42:57 【问题描述】:

我想在下面的虚拟代码中使用名为标签的单元格在 Matlab 中创建一个图例。我已阅读此论坛中的手册和帖子,建议使用 legend(labels:) - 但它仍然只显示最后一个图例条目。 legend('show') 显示所有条目,但未使用标签中定义的正确名称。我做错了什么?

clc;
clear;
close all;
format long;

data = cell(4,2);
for number = 1:2
     data1,number = [1 3 5];
     data2,number = [4 2 9];
     data3,number = [2 7 3];
     data4,number = [7 4 2];
end

labels = cell(4,2);
for number = 1:2
    labels1,number = strcat(string(number), ': legend entry 1');
    labels2,number = strcat(string(number), ': legend entry 2');
    labels3,number = strcat(string(number), ': legend entry 3');
    labels4,number = strcat(string(number), ': legend entry 4');
end

x = 1:3;

figure;
hold on;
for i = 1:numel(data)
   plot(x, datai,'-o','LineWidth',1.1);
end
hold off;
   legend(labels:);
%    legend('show');
   xlim([0.5 3+0.5]);
   ylim([0 10]);
   set(gca, 'xTick', 1:3, 'yTick', 0:1:10 );
   ytickformat('percentage');
   xlabel('Scenarios');

【问题讨论】:

您的标签变量是一个 4x2 元胞数组。你期待什么样的传奇? 【参考方案1】:

这样做:

    labels1,number = strcat(string(number), ': legend entry 1');
    labels2,number = strcat(string(number), ': legend entry 2');
    labels3,number = strcat(string(number), ': legend entry 3');
    labels4,number = strcat(string(number), ': legend entry 4');

因为否则您在单元格内创建单元格,它们必须是单元格内的字符串。

clc;
clear;
close all;
format long;

data = cell(4,2);
for number = 1:2
     data1,number = [1 3 5];
     data2,number = [4 2 9];
     data3,number = [2 7 3];
     data4,number = [7 4 2];
end

labels = cell(4,2);
for number = 1:2
    labels1,number = strcat(string(number), ': legend entry 1');
    labels2,number = strcat(string(number), ': legend entry 2');
    labels3,number = strcat(string(number), ': legend entry 3');
    labels4,number = strcat(string(number), ': legend entry 4');
end

x = 1:3;

figure;
hold on;
for i = 1:numel(data)
   plot(x, datai,'-o','LineWidth',1.1);
end
hold off;
   legend(labels:);
%    legend('show');
   xlim([0.5 3+0.5]);
   ylim([0 10]);
   set(gca, 'xTick', 1:3, 'yTick', 0:1:10 );
   ytickformat('percentage');
   xlabel('Scenarios');

现在是正确的。

图形输出:

【讨论】:

以上是关于来自单元格的 Matlab 图例,用于使用 for 循环创建的绘图的主要内容,如果未能解决你的问题,请参考以下文章

使用html内容更改matlab中表格单元格的背景颜色

Matlab中for循环中的图例

将matlab中单元格的内容打印到文件中

R语言使用hexbin包的hexbin函数可视化散点图应对数据量太大且有数据重叠的情况普通散点图可视化效果变差的情况提供了对六边形单元格的二元绑定通过图例颜色标定每一个区域数据点的数量

在Matlab中直接获取数组/单元格的元素[重复]

MATLAB:从读取并放入单元格的csv文件制作直方图?