如何处理导入图形文件时通过plotyy生成的图表的图例?

时间:2014-05-19 09:04:42

标签: matlab

所以我的数据在这里:http://www.atmos.uw.edu/~akchen0/CERES_Project/

我想在这里获得图中图例的句柄,这样我就可以在子图上重新绘制图例时复制图形的图例条目。

如果我尝试通过运行findobj(ax1,'Type','axes','Tag','legend')来找到轴,它只返回一个空矩阵:0-by-1。还有另一种获得传奇的方法吗?

2 个答案:

答案 0 :(得分:6)

你的错误是,你使用了轴柄而不是数字手柄:

leg = findobj(figureHandle,'Type','axes','Tag','legend')

或简单地说:

leg = findobj(gcf,'Tag','legend')

会奏效。

答案 1 :(得分:3)

设置是这样的。首先创建图。这个作为画布服务。然后在图上绘制其他对象。绘制的对象称为子对象。函数调用,

plot(0:10);

创建一个人物和一个孩子。该孩子被称为axes。通过添加图例,

legend('This is a legend');

matlab创建一个名为legend的轴对象,并将其置于图中。这成了另一个孩子。可以在

中找到子对象的句柄
 h = get(gcf,'Children')

然后你可以保存图并关闭它。当您再次加载图形时,将恢复整个图形,带有图例等。这包括为孩子们提供新的对象句柄。这意味着可以再次使用

检索孩子
 h = get(gcf,'Children')

您可以使用

找到子属性
get(h(anyElementInChButJustOnePerCall))

通过查看属性,您会注意到有一个名为Tag的属性。这个名为legend的图例。您可以使用get找到它并查看所有句柄的属性(不应该太多)或自动使用for循环

h = get(hFig,'children');
hLeg = [];
for k = 1:length(h)
    if strcmpi(get(h(k),'Tag'),'legend')
        hLeg = h(k);
        break;
    end
end

其中hFig是图的句柄(写在右上角“图......”)。或者如果刚刚加载了图形,可以使用“获取当前数字”gcf来访问它。