Matlab `bar`: расстояние между группами баров - PullRequest
0 голосов
/ 19 мая 2018

Следующее создает пары баров:

x = rand(10,2);
hBar = bar(x)

Между каждой парой много места.Как я могу уменьшить расстояние между парами (не между столбцами в каждой паре)?

get(h(1)) не обнаруживает каких-либо вероятных свойств для изменения.Свойство BarWidth контролирует только интервалы между барами в каждой паре.

Редактор свойств также не выявляет вероятных кандидатов.

Я использую Matlab 2015b.

Afternote: Указание широкого аргумента width для bar расширяет каждый столбец, не меняя их положения относительно друг друга, так что, безусловно, сократится разрыв между группами столбцов.Однако это также приводит к перекрытию столбцов в каждой группе.

1 Ответ

0 голосов
/ 20 мая 2018

В MATLAB R2017a bar(...,'hist') использует гистограмму более старого стиля, не используя графические объекты Bar, но используя более низкоуровневые графические объекты Patch.(Я указываю номер версии, потому что это не упомянуто в документации, поэтому возможно, что более новая версия делает это по-другому.)

Мне удалось изменить расположение вершин для этих Patchобъекты для сдвига баров, увеличивая пространство внутри групп и уменьшая пространство между группами.По умолчанию панели внутри групп соприкасались с помощью опции 'hist'.

x = rand(10,2);
hBar = bar(x,'hist');

v = hBar(1).Vertices;
v(:,1) = v(:,1) - 0.1; % shift x locations left
hBar(1).Vertices = v;

v = hBar(2).Vertices;
v(:,1) = v(:,1) + 0.1; % shift x locations right
hBar(2).Vertices = v;

Изменить код выше для более тонкой настройки должно быть относительно легко.Обратите внимание, что каждая полоса использует 5 вершин.В случае 2 баров, левый имеет круглые значения справа, а правый имеет круглые значения слева.Вы можете идентифицировать эти значения через mod(v(:,1),1)==1.Но больше баров это не удержит.Может быть, самый простой подход - отдельно настроить значения v(ii:5:end,1), для ii от 1 до 5.

...