在MATLAB中创建包含散点图和法线图的图例

时间:2017-10-23 15:31:50

标签: matlab plot matlab-figure legend

我希望我的图例包含绘图中的线条和散点图中的标记。例如,

rest = importdata('test.xlsx');

x = test.data(:,1);
y = test.data(:,2);

xx = min(x):0.001:max(x); 
yy = interp1(x,y,xx,'cubic');

figure
s1 = scatter(x,y, 'filled', 'k');
hold on
p1 = plot(xx,yy, '--k');

legend(p1, 'x1');

此代码仅使用绘图中的短划线创建图例,而不是散点图中的点。我希望图例中的点和虚线都在同一个标​​签上。类似" -.-"

非常感谢任何帮助。 感谢。

3 个答案:

答案 0 :(得分:1)

选项1

为图例创建一个没有数据(nan)的虚拟图表(同样,如您所见,您可以通过一次调用plot来绘制所有元素:

p = plot(nan,nan,'--ok', xx,yy,'--k', x,y,'ok');
set(p,{'MarkerFaceColor'},{'k'}); % fill the circles
legend('x1');

结果:

dummy legend

选项2

Ins legend(p1, 'x1');,写下:

[~,ico] = legend(p1,'x1'); % create the legend, and get handels to it's parts
ico(3).Marker = 'o'; % set the marker to circle 
ico(3).MarkerFaceColor = 'k'; % set it's fill color to black

ico是:

  3×1 graphics array:

  Text    (x1)
  Line    (x1)
  Line    (x1)

第一个元素是图中的文字'x1'。第二个元素是虚线,第三个元素是p1的(不存在)标记。第三个元素保留用于像plot(xx,yy,'--ok');这样的情况,其中图例包含标记和线条,但线条(图例中的 )用两个点表示,标记只有一个,所以我们需要不同的对象。如果您在上面的示例中键入ico(2).Marker = 'o';,请尝试查看会发生什么。

答案 1 :(得分:0)

MATLAB中的图例是包含相同基本对象(如线条和文本)的附加轴。 如果你想绘制自定义图例,简单的方法是使用原始命令linetextpatch来填充矩形。您还可以添加一个轴对象作为容器。

答案 2 :(得分:0)

通过在图例命令中指定FourthActivity,您告诉MATLAB只在图例中插入与句柄p1对应的行的项目 - 这就是您所看到的。

在您的示例中,您只需要

p1