Логарифмическая ось x в стеке MatLab - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь составить стековый график из таблицы, чтобы представить несколько переменных с одной и той же осью X. однако я хочу, чтобы ось х была логарифмической. Я не мог найти какой-либо способ в документации стека. Кто-нибудь есть какие-либо предложения о том, как я могу решить эту проблему?

Я пробовал вместо этого использовать вспомогательные графики, однако, таким образом, мои графики не поместились бы все на одной странице, и у меня было бы много пробелов между вложенными участками,Поэтому я выбрал stackplot, чтобы сделать его более красивым и менее затратным.

tbl = readtable('usage.csv'); 

newYlabels = {'Heating (kWh/year)','Cooling (kWh/year)','Electricity (kWh/year)'};  
stackedplot(tbl,[{2:16},{17:27},{28:35}],'XVariable',[1],'DisplayLabels',newYlabels);

Вот вывод кода:

text

Вотизображение того, что я пытаюсь сделать, но ось x должна быть реальной переменной (\ beta) в логарифмическом масштабе

text

1 Ответ

1 голос
/ 18 октября 2019

stackedplot, к сожалению, не имеет опции логарифмических осей, и, поскольку она создает StackedAxes вместо обычного Axes объекта, изменить это невозможно.

Если единственная причина, по которой вы хотите использовать stackedplot, заключается в том, чтобы иметь меньше пробелов, вы можете проверить tight_subplot на Matlab FEX . Это позволит вам просто сделать: set(ax, 'XScale', 'log').

Однако вы можете взять log ваших x -данных и добавить их в таблицу:

tbl = readtable('outages.csv');     % sample data
tbl = sortrows(tbl, 'OutageTime');  % sort by date

% make x vector; for example just row numbers
x = (1:size(tbl,1)).';
xlog = log10(x);

% add x to table
tbl.Xlog = xlog; 
tbl.X = x;

% plot normal x
f = figure(1); clf;
s = stackedplot(tbl, {'Loss'}, 'XVariable', 'X');
xlabel('rows');

% plot log(x)
f = figure(2); clf;
s = stackedplot(tbl, {'Loss'}, 'XVariable', 'Xlog');
xlabel('log(rows)')

Нормальный: enter image description here

Журнал: enter image description here

...