【问题标题】:Common legend for mutliple pie charts多个饼图的常见图例
【发布时间】:2018-08-29 04:04:18
【问题描述】:

我有两个饼图,都包含 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')

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

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

我该怎么办?

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

【问题讨论】:

  • 图例总是附加到一个轴上(即一个子图)。如果两个子图使用相同的颜色(如您的情况),您可以简单地为其中一个添加图例。试试legend(L)
  • 我试过那个,但我需要在子图之间居中的图例。也许我会用一个图片编辑软件。

标签: matlab legend subplot


【解决方案1】:

图例始终附加到轴上,您无法创建(据我所知)引用两个不同轴中的对象的图例。但是因为在您的图中,两个图都使用相同的颜色,您可以简单地为其中一个图创建一个图例,并将其放置在您的图中您想要的位置:

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];

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


我认为最好直接在饼图上添加标签,而不是让读者在图例中查找颜色。 IMO,确切的百分比不应该显示在数字上。如果您需要传达准确的值,请使用表格。一个数字是为了便于比较大小。如果您添加百分比,人们将专注于这些,而忽略图形表示。我会这样呈现数据:

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)

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2012-05-10
    • 2020-09-19
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多