基于MATLAB的矩形网格

基于MATLAB的矩形网格,matlab,matlab-figure,boxplot,Matlab,Matlab Figure,Boxplot,我有两个单元格数组,每个单元格有一个矩阵x=(10X5)。x中的每一行是一个数组(介于-1和1之间),平均值为“m”和标准值为“s”。现在,我想用MATLAB在一个矩形网格中表示这个矩阵,这样每个框都有一个平均值(橙色)和标准偏差(在平均值的两侧填充红色),如示例所示。所以基本上应该有10X2的矩形网格(对应于10行和两个单元格)。有人能帮我吗?我在网上查了一下,但什么也没找到 您可以使用boxplot创建绘图的初始结构,然后修改它们以表示所需内容。每个矩阵x被转换为一个网格图,这些图与子图并排

我有两个单元格数组,每个单元格有一个矩阵x=(10X5)。x中的每一行是一个数组(介于-1和1之间),平均值为“m”和标准值为“s”。现在,我想用MATLAB在一个矩形网格中表示这个矩阵,这样每个框都有一个平均值(橙色)和标准偏差(在平均值的两侧填充红色),如示例所示。所以基本上应该有10X2的矩形网格(对应于10行和两个单元格)。有人能帮我吗?我在网上查了一下,但什么也没找到


您可以使用
boxplot
创建绘图的初始结构,然后修改它们以表示所需内容。每个矩阵
x
被转换为一个网格图,这些图与
子图
并排放置

下面是一个简短的代码,用于执行您想要的操作:

A = {rand(10,5)*2-1,rand(10,5)*2-1}; % your cell array
for n = 1:numel(A)
    subplot(1,2,n)
    x = A{n};
    means = mean(x,2);
    stds = std(x,[],2);
    % create boxplot for all variables:
    bx = boxplot(x.','Orientation','horizontal');
    % remove what's unnecessary:
    delete(bx([1:4 7],:))
    % set the median to mean:
    set(bx(6,:),{'XData'},...
        mat2cell([means means],ones(size(x,1),1),2))
    set(bx(6,:),{'Color','LineWidth'},{[1 0.7 0],3})
    % set the interQ range to std:
    std_bounds = repmat(means,1,5)+bsxfun(@times,stds,[-1 1 1 -1 -1]);
    set(bx(5,:),{'XData'},mat2cell(std_bounds,ones(size(x,1),1),5))
    set(bx(5,:),'Color',[0.8 0 0])
    for k = 1:size(std_bounds,1)
        patch(std_bounds(k,:),get(bx(5,k),'YData'),[0.8 0 0],...
            'FaceAlpha',0.7,...
            'EdgeColor','none')
    end
    xlim([-1 1])
    ax = gca;
    ax.Children = ax.Children([end 1:end-1]);
    % create the grid:
    set(ax,{'YGrid','GridColor','GridAlpha','XTick','XAxisLocation','YTick'},...
        {'on','k',1,[-1 0 1],'top',(1:size(x,1))+0.5})
    % set the zero line:
    line(ax,zeros(size(x,1)+2,1),(0:size(x,1)+1).','LineStyle','--','Color','k')
    if n>1
        set(ax,'YTickLabel',[])
    end       
end
它创建了以下内容:


subplot()
boxplot()
看一看,然后返回一些代码开始with@EBH... 谢谢你的例子。我认为这不是一个箱线图问题。基本上,它需要绘制一个矩形网格,其中的线对应于标准偏差的平均值和填充面积。