7

私はこのような3Dプロットを持っています:

代替テキスト

プロットのy軸では、3つのバーの各グループは、同じパラメーターx1、x2、x3を参照しています。3つのバーの各グループのy軸に間隔を空けて、それらのバーが同じパラメーターを参照していることがより明確になるようにします。同時に、3本の棒の各グループのy軸にラベルを付けたいと思います。たとえば、y軸の次のラベルレイアウトが必要になります。

x1 x2 x3   x1 x2 x3   x1 x2 x3
  grid1     grid2      grid3

どんな提案も大歓迎です!バーをプロットするために使用したコードを以下に示します。

Z = rand(9,5);
h = bar3(Z);
[r c] = size(Z);

zdata = [];
for i = 1:c
    zdata = [];
    for j = 1:r
        zdata = [zdata; ones(6,4)*Z(j,i)];
    end
set(h(i),'Cdata',zdata)
end
colormap
colorbar
set(gca,'YTickLabel',['x1';'x2';'x3';'x1';'x2';'x3';'x1';'x2';'x3']);
view([-64 44]);
4

1 に答える 1

10

bar3Y 軸に沿ってバーの列を配置する位置を示す追加の入力を指定することにより、バーのグループ間に間隔を追加できます。関数 を使用して、軸に追加のテキストをプロットすることもできますtext

Z = rand(9, 5);              % Some random sample data
[r, c] = size(Z);            % Size of Z
Y = [1 2 3 5 6 7 9 10 11];   % The positions of bars along the y axis
C = mat2cell(kron(Z, ones(6, 4)), 6*r, 4.*ones(1, c)).';  %' Color data for Z

hBar = bar3(Y, Z);           % Create the bar graph
set(hBar, {'CData'}, C);     % Add the color data
set(gca, 'YTickLabel', {'x1' 'x2' 'x3'});  % Modify the y axis tick labels
view(-70, 30);               % Change the camera view
colorbar;                    % Add the color bar
text(-2, 2, 'grid1');        % Add "grid1" text
text(-2, 6, 'grid2');        % Add "grid2" text
text(-2, 10, 'grid3');       % Add "grid3" text

ここに画像の説明を入力

選択した特定のカメラ ビューで必要な場所にテキスト オブジェクトをレンダリングするには、テキスト オブジェクトの x 値と y 値を調整する必要がある場合があることに注意してください。

編集:

各バーの上にも値を表示したい場合は、上記のコードに次を追加することで実行できます。

hText = text(kron((1:c).', ones(r, 1)), ...    %' Column of x values
             repmat(Y(:), c, 1), ...            % Column of y values
             Z(:)+0.05, ...                     % Column of z values
             num2str(Z(:)), ...                 % Text strings
             'HorizontalAlignment', 'center');  % Center the strings

一部のテキストがバーの後ろに重なったり隠れたりするため、このように多くのテキストをプロットすると少し面倒になることに注意してください。バーの色は実際には値を示すためのものであるため、テキストも少し冗長です。

于 2010-08-30T14:59:45.927 に答える