создание одного столбца с цветами из каждой стопки в зависимости от частоты распределения - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть вектор размером 10000x1, который я уменьшил до 4400x1.Я хочу сделать столбец с накоплением с отдельными записями этого вектора.Каждый сегмент уложенной полосы должен быть окрашен в зависимости от частоты распределения.Например: если значение представлено 10 раз, оно должно быть почти черным.если его всего 1, он должен быть светло-серым.

1-я проблема: Когда я использую маленький вектор, я получаю столбик с накоплением.Если я использую тот, который мне нужен, я получаю несколько столбцов вместо одного столбца с накоплением.

2-я проблема: Как я могу заставить столбец использовать серую шкалу для их окрашивания?

Я попытался переместить мой вектор в 1x4400, который ничего не изменил.

Я использовал bar(data,'stacked'), который работает для маленького вектора (по крайней мере, я получаю столбец с накоплением. Чтобы получить один столбец, яиспользуется:

test =  [1 2 3 4 5 1 2 3];
bar([test; nan(size(test))],'stacked');

this works

size of data : 4400x1
bar([data; nan(size(data))],'stacked');

this doesn't stack

1 Ответ

0 голосов
/ 01 мая 2019

Когда я ввожу ваш первый пример с матрицей 1x8:

test =  [1 2 3 4 5 1 2 3];
bar([test; nan(size(test))],'stacked');

Я вижу тот же сюжет, что и вы. Затем я транспонирую test, чтобы получить матрицу 8x1:

test = test.';
bar([test; nan(size(test))],'stacked');

и я вижу нечто похожее на ваш второй сюжет:

non-stacked bars, occupying half the horizontal space

Обратите внимание, как из-за NaN правая половина оси X не имеет столбцов.

Таким образом, чтобы получить стекированные столбцы, вам нужно иметь вектор-строку . Однако ваши данные представляют собой вектор столбцов, матрицу 4400x1. data = data.' изменит это.

Тем не менее, вполне вероятно, что MATLAB не сможет создать столбчатую диаграмму с накоплением из 4400 элементов. Я пробую это на MATLAB Online, и я ждал несколько минут и до сих пор не знаю сюжета. В любом случае, вы не станете мудрее с таким сюжетом. Не делай этого!


По поводу вашего второго вопроса: вы можете изменить порядок цветов графика на gray:

set(gca,'colororder',flipud(gray(256)))

Однако столбцы с накоплением не окрашены в соответствии с их значением, они просто по очереди используют цвета списка.


Лучшим решением было бы представить данные в виде изображения:

test =  [1 2 3 4 5 1 2 3];
imagesc(test.')
colormap(flipud(gray(255)))
set(gca,'xlim',[0,2],'xtick',1)

vertical bar with gray-scale boxes

[Я только что понял, что вы можете выпрямить ось Y, imagesc инвертирует ее. Просто: set(gca,'ydir','normal').]

...