Я хотел бы создать график, который содержит как линии (plot
, stairs
), так и бары (bar
).Для plot
и stairs
я обычно использую свойство 'DisplayName'
для генерации легенды.С составным bar
сюжетом это, похоже, больше не работает.Рассмотрим это MWE:
x_max = 20;
results = [3 37 50; 7 27 25; 11 0 13; 18 45 0];
figure('Position', [470 430 1000 600]);
plot(0:x_max, polyval([3 1], 0:x_max), 'DisplayName', 'Production rate');
hold on; grid on;
bh = bar(results(:,1), results(:,2:3), 0.2, 'stacked', 'DisplayName', 'Fraction');
xlim([0 x_max]);
legend('Location', 'best');
set(gca, 'FontSize', 18);
hold off
, который производит этот график: ![enter image description here](https://i.stack.imgur.com/vlSAy.png)
Я хотел бы получить пользовательскую запись легенды для каждой из двух фракций, например'Fraction1', 'Fraction2'
.Однако оба варианта выдают ошибку:
bar(results(:,1), results(:,2:3), 0.2, 'stacked', 'DisplayName', 'Fraction1', 'Fraction2')
bar(results(:,1), results(:,2:3), 0.2, 'stacked', 'DisplayName', {'Fraction1', 'Fraction2'})
>>Error setting property 'DisplayName' of class 'Bar':
Value must be a character vector or string scalar.
Но если я сделаю
bh.get('DisplayName')
, я получу
ans =
2×1 cell array
{'getcolumn(Fraction,1)'}
{'getcolumn(Fraction,2)'}
Что означает, что Matlab внутренне генерирует ячейкумассив для 'DisplayName'
, но не позволяет мне назначить один.Это терпит неудачу:
bh.set('DisplayName', {'Fraction1'; 'Fraction2'})
Я знаю, что мог бы редактировать массив ячеек записей легенды напрямую, но я предпочитаю 'DisplayName'
, так как записи легенды никогда не выходят из строя, когда я изменяю команды построения (илидобавить или удалить любой из них).Любое решение?