Общая легенда для круговых круговых диаграмм - PullRequest
0 голосов
/ 29 августа 2018

У меня есть две круговые диаграммы, каждая из которых содержит 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 голосов
/ 29 августа 2018

Легенда всегда прикреплена к осям, вы не можете создать (насколько мне известно) легенду, которая ссылается на объекты в двух разных осях. Но поскольку на вашей фигуре оба графика используют одинаковые цвета, вы можете просто создать легенду для одного из них и расположить ее внутри фигуры там, где вы хотите:

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)
...