Как изменить размер шрифта правой оси графика Парето в Matlab

Я пытаюсь выделить правую сторону оси Y для графика Парето в Matlab, но не могу заставить его работать. У кого-нибудь есть предложения? Когда я пытаюсь изменить второе измерение топора, я получаю ошибку: "Индекс превышает размеры матрицы.

Ошибка в наборе pcaCluster (строка 66) ​​(ax(2),'Linewidth',2.0);"

figure()
ax=gca();
h1=pareto(ax,explained,X);
xlabel('Principal Component','fontweight','b','fontsize',20)
ylabel('Variance Explained (%)','fontweight','b','fontsize',20)
set(ax(1),'Linewidth',2.0);
set(ax(1),'fontsize',18,'fontweight','b');
%set(ax(2),'Linewidth',2.0);
%set(ax(2),'fontsize',18,'fontweight','b');
set(h1,'LineWidth',2)

2 ответа

Решение

На самом деле вам нужно добавить выходной аргумент во время вызова pareto и вы получите 2 ручки (линия и ряд стержней), а также 2 оси. Вы хотите получить YTickLabel свойство 2-х осей получено. Поэтому я подозреваю, что в вашем звонке pareto выше вам не нужно поставлять ax аргумент.

Пример:

[handlesPareto, axesPareto] = pareto(explained,X);

Теперь, если вы используете эту команду:

RightYLabels = get(axesPareto(2),'YTickLabel') 

Вы получаете следующее (или что-то подобное):

RightYLabels = 

    '0%'
    '14%'
    '29%'
    '43%'
    '58%'
    '72%'
    '87%'
    '100%'

Что вы можете сделать, это на самом деле полностью стереть их и заменить их text аннотации, которые вы можете настроить по своему усмотрению. Смотрите здесь для хорошей демонстрации.

Применительно к вашей проблеме (с фиктивными значениями из документации функций), вот что вы можете сделать:

clear
clc
close all

y = [90,75,30,60,5,40,40,5];
figure
[hPareto, axesPareto] = pareto(y);

%// Get the poisition of YTicks and the YTickLabels of the right y-axis.
yticks = get(axesPareto(2),'YTick')
RightYLabels = cellstr(get(axesPareto(2),'YTickLabel'))


%// You need the xlim, i.e. the x limits of the axes. YTicklabels are displayed at the end of the axis.

xl = xlim;

%// Remove current YTickLabels to replace them.
set(axesPareto(2),'YTickLabel',[])

%// Add new labels, in bold font.
for k = 1:numel(RightYLabels)    
    BoldLabels(k) = text(xl(2)+.1,yticks(k),RightYLabels(k),'FontWeight','bold','FontSize',18);
end

xlabel('Principal Component','fontweight','b','fontsize',20)
ylabel('Variance Explained (%)','fontweight','b','fontsize',20)

что дает это:

Конечно, вы можете настроить все, что вы хотите, как это.

Это связано с тем, что ax является дескриптором объекта (первая / левая) оси. Это одно значение и с ax(1) вам повезло, его ax опять же, но ax(2) просто не действует.

Предлагаю прочитать документы о том, как получить вторую ось. Еще одна хорошая идея - открыть график в браузере графиков, щелкнуть любой объект, который вы хотите, чтобы он был выбран, и затем получить его ручку, набрав gco (получить текущий объект) в командном окне. Затем вы можете использовать его с set(gco, ...),

Другие вопросы по тегам