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

问题描述 投票:2回答:3

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

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

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

任何帮助深表感谢。谢谢。

matlab plot matlab-figure legend
3个回答
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

而不是qazxsw poi,写这个:

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

第一个元素是图中的文本“x1”。第二个元素是虚线,第三个元素是p1的(不存在)标记。第三个元素保留用于像 3×1 graphics array: Text (x1) Line (x1) Line (x1) 这样的情况,其中图例包括标记和一条线,但是线条(在图例中)用两个点表示,标记只有一个,所以我们需要不同的对象。尝试查看在上面的示例中键入plot(xx,yy,'--ok');会发生什么。


0
投票

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


0
投票

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

在您的示例中,您只需要

p1
© www.soinside.com 2019 - 2024. All rights reserved.