0

我试图在 Matlab 中为帕累托图加粗右侧 y 轴,但我无法让它工作。有没有人有什么建议?当我尝试更改 ax 的第二个维度时,出现错误:“索引超出矩阵维度。

pcaCluster 中的错误(第 66 行)set(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)
4

2 回答 2

0

这是因为 ax 是(第一个/左)轴对象的句柄。这是一个单一的值,ax(1)你很幸运,它又是一个ax,但ax(2)根本无效。

我建议阅读有关如何获得第二个轴的文档。另一个好主意始终是在绘图浏览器中打开绘图,单击所需的任何对象以将其选中,然后通过gco在命令窗口中键入(获取当前对象)来获取其句柄。然后,您可以将其与set(gco, ...).

于 2015-02-11T17:55:36.037 回答
0

实际上,您需要在调用期间添加一个输出参数,pareto然后您将获得 2 个句柄(线和条系列)以及 2 个轴。您想获得获得YTickLabel的第二个轴的属性。所以我怀疑在你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)

这给出了这个:

在此处输入图像描述

你当然可以像这样自定义你想要的一切。

于 2015-02-11T18:01:42.090 回答