Как настроить группировку трехмерных стержней и метки оси Y в MATLAB? - PullRequest
7 голосов
/ 30 августа 2010

У меня есть трехмерный график, подобный следующему:

alt text

На оси Y графика каждая группа из трех баров относится к одним и тем же параметрам: x1, x2,x3.Я хотел бы иметь интервал по оси Y для каждой группы из трех баров, чтобы стало более ясно, что эти бары ссылаются на одни и те же параметры.В то же время я хотел бы поставить метку на оси 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]);

1 Ответ

10 голосов
/ 30 августа 2010

Вы можете добавить интервал между вашими группами столбцов, указав дополнительный ввод для bar3, указывающий позиции, в которых нужно разместить столбцы столбцов вдоль оси y. Вы также можете нанести дополнительный текст на свои оси, используя функцию 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

enter image description here

Обратите внимание, что вам, возможно, придется настроить значения x и y ваших текстовых объектов, чтобы они отображались в том месте, где вы хотите, для данного вида камеры, который вы выбрали.

EDIT:

Если вы также хотите отобразить значения над каждой полосой, вы можете сделать это, добавив следующее к приведенному выше коду:

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

Следует отметить, что слишком много зарисованного текста становится немного грязным, поскольку часть текста будет перекрываться или скрываться за решеткой. Текст также немного избыточен, поскольку цвет столбцов действительно предназначен для отображения значений.

...