2015-02-11 2 views
0

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

Ошибка в pcaCluster (строка 66) ​​ набор (ах (2),„Ширина линии“, 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) 

ответ

0

На самом деле вам нужно добавить выходной аргумент во время разговора к 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, которые вы можете настроить, когда вы l Айк. См. here для приятной демонстрации.

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

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) 

, который дает это:

enter image description here

Вы можете, конечно, подгоняет все, что вы хотите, как это.

0

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

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