多个饼图的常见图例

时间:2018-08-29 04:04:19

标签: matlab legend subplot

我有两个饼图,每个饼图都包含5个元素。我已经用subplot命令将它们分开了。现在,我想为这5个元素构建一个共同的图例。

X=[0.3200   0.3800  0.2400  0.0600  0.0001];
Y=[0.14     0.28    0.37    0.11    0.11];

figure
subplot(1,2,1)
H1 = pie(X);
title('Pre-event Distribution', 'FontSize',12)

subplot(1,2,2)
H2 = pie(Y);
title('Post-event Distribution', 'FontSize',12)

L = {'Max','Sym','Dvd','Att','Sta'};

legend([H1, H2],L,'location','southoutside')

我想从其他类似线程中受益,但在那种情况下,它们使用一个对应于每个子图的图例元素。在我的情况下,图例元素的数量不等于子图的数量。因此,它会产生错误:

  

一个或多个指定对象不能包含在图例中。

我该怎么办?

编辑:子图使用相同的颜色,我需要在这些子图之间居中放置图例。

1 个答案:

答案 0 :(得分:2)

图例始终附加在一个轴上,据我所知,您不能创建引用两个不同轴上的对象的图例。但是因为在您的图中两个图使用相同的颜色,所以您可以简单地为其中一个图例创建图例,然后将其放置在图中所需的位置:

h = legend(L);
sz = h.Position(3:4);
h.Position = [ 0.5-sz(1)/2, 1-sz(2)-0.05, sz ];

注意:位置单位已标准化,例如0是左边缘或下边缘,而1是右边缘或上边缘。位置向量为[ left, right, width, height ]

我首先获得了图例框的大小,然后将其水平居中放置,并且距上边缘的距离为0.05。

还可以在图形工具栏中选择鼠标光标按钮,以使鼠标与图形组件交互。现在,您可以单击图例框并将其拖动到所需的位置。 h.Position现在将位置放回原处,因此您可以将其存储在程序中,以在每次重新创建图形时重新创建相同的手动位置。例如,我将框拖到该位置,至少在我的屏幕上看起来不错:

h.Position = [0.4647, 0.2333, 0.1062, 0.1452];

(但是请注意,框的大小可能会有所不同,具体取决于字体大小等。)


我认为最好直接在饼图中添加标签,而不是让读者在图例中查找颜色。海事组织,确切的百分比永远不应显示在数字上。如果需要传达确切的值,请使用表格。一个数字可以轻松地比较幅度。如果添加百分比,人们将专注于这些百分比,而忽略图形表示。我将这样显示数据:

X = [0.3200   0.3800  0.2400  0.0600  0.0001];
Y = [0.14     0.28    0.37    0.11    0.11];
L = {'Max','Sym','Dvd','Att','Sta'};

figure
subplot(1,2,1)
pie(X,L);
title('Pre-event Distribution', 'FontSize',12)

subplot(1,2,2)
pie(Y,L);
title('Post-event Distribution', 'FontSize',12)