Как настроить абсолютную ширину полосы в MATLAB - PullRequest
0 голосов
/ 08 ноября 2018

Я запутался с баром с настройкой в ​​MATLAB, например, когда использую бар как:

bar(randsample(0:0.0001:1,100),randn(100,1))

Я получаю изображение, подобное этому: enter image description here

Кажется, что планка слишком тонкая, чтобы хорошо выглядеть. После поиска справки я могу использовать такой код:

bar(randsample(0:0.0001:1,100),randn(100,1),50)

и я получаю это: enter image description here

Кажется, намного лучше. Но если я изменю номер выборки со 100 на 10, тот же код не будет работать.

bar(randsample(0:0.0001:1,10),randn(10,1),50)

enter image description here

Надеюсь, я ясно объяснил свою проблему. Похоже, что третий параметр функции бара - это относительная ширина, которая соотносится с размером ввода первого и второго параметра. Можно ли зафиксировать абсолютную ширину полосы независимо от того, сколько точек ввода данных? или есть лучшая функция для рисования таких фигур? Большое спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

user @ am304 прав насчет параметра width

В вашем коде произошло то, что вы установили x значения для результатов randsample(0:0.0001:1,10)

Если вы дадите свой графикширина 1 означает, что 2 столбца, которые находятся непосредственно рядом друг с другом, будут касаться друг друга равным интервалом x.

В вашем случае у вас неправильный интервал x.Ширина полосы определяется минимальным расстоянием между двумя значениями x (которое вы получаете из randsample()).Иногда это пространство - и, следовательно, ширина вашего бара - очень мало.Иногда это шире.

Измените с на 1 и создайте несколько графиков.Вы заметите, что два всегда соприкасаются друг с другом, и никто не перекрывает друг друга, а все остальные имеют промежутки между ними.Если вы измените ширину на 50, графики будут частично перекрываться (в зависимости от случайности от randsample), потому что ваши столбцы в 50 раз больше минимальной ширины между двумя значениями x.

В случаеВ вашем randsample(0:0.0001:1,100) примере просто более вероятно, что два значения находятся близко друг к другу, поэтому увеличение ширины помогает вам что-то увидеть (потому что столбцы перекрываются).

0 голосов
/ 08 ноября 2018

Лучший способ построить объекты со случайными x точками - это использовать stem. По умолчанию он рисует линию от нулевой линии до точки отсчета с кружком, представляющим каждую точку отсчета. Но это можно изменить. Например:

stem(randsample(0:0.0001:1,100),randn(100,1), 'Marker','none', 'LineWidth',4)

создает график, похожий на вашу вторую попытку, но с полосами фиксированной ширины (4 точки).

0 голосов
/ 08 ноября 2018

Из документации :

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

Ниже приведен пример:

Установите ширину каждой полосы до 40 процентов от общего доступного пространства. за каждый бар.

y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y,0.4)

enter image description here

Таким образом, нижняя строка: ширина указана в% от общего пространства, доступного для каждого бара. Проблема заключается в том, что у вас слишком много баров, поэтому пространство, доступное для каждого бара, крошечно. Установка ширины в 50 или 5000% доступного пространства означает, что каждый столбец будет существенно перекрывать соседние столбцы. Поскольку у вас их так много, средний график выглядит «разумным», так как я подозреваю, что многие бары перекрываются, и многие из них находятся на нуле, поэтому вы просто не можете их видеть. Если вы снизитесь до разумного количества баров, как в вашем последнем примере, то установка ширины в 5000% выглядит нелепо, как вы узнали.

Итак, подведем итог: уменьшите количество стержней и укажите ширину стержней от> 0 до 1 (1 означает отсутствие зазора, все стержни касаются друг друга).

...