exponenta event banner

swarmchart

Диаграмма разброса роев

  • Swarm chart

Описание

пример

swarmchart(x,y) отображает роевую диаграмму, которая представляет собой график рассеяния со смещением точек (дрожание) в x-размерность. Точки образуют различные формы, а контур каждой формы подобен скрипичному сюжету. Диаграммы Swarm помогают визуализировать дискретные x данные с распределением y данные. В каждом месте в xточки дрожат на основе оценки плотности ядра y.

  • Для печати одного набора точек укажите x и y в виде векторов равной длины.

  • Для печати нескольких наборов точек на одном и том же наборе осей укажите хотя бы одну из них x или y в виде матрицы.

пример

swarmchart(x,y,sz) задание размеров маркера. Для печати всех маркеров одинакового размера укажите sz как скаляр. Для печати маркеров различных размеров укажите sz в виде вектора или матрицы.

пример

swarmchart(x,y,sz,c) определяет цвета маркеров. Можно задать один цвет для всех маркеров или изменить цвет. Например, можно вывести на печать все красные круги, указав c как 'red'.

пример

swarmchart(___,mkr) задает маркер, отличный от маркера по умолчанию, который является окружностью. Определить mkr после всех аргументов в любом из предыдущих синтаксисов.

пример

swarmchart(___,'filled') заполняет маркеры. Укажите 'filled' после всех аргументов в любом из предыдущих синтаксисов.

пример

swarmchart(___,Name,Value) задает дополнительные свойства для диаграммы роя с использованием одного или нескольких Name,Value аргументы пары. Укажите свойства после всех других входных аргументов. Список свойств см. в разделе Свойства разброса.

пример

swarmchart(ax,___) отображает ройковую диаграмму в целевых осях. Укажите оси перед всеми аргументами в любом из предыдущих синтаксисов.

пример

s = swarmchart(___) возвращает значение Scatter объект или массив Scatter объекты. Использовать s для изменения свойств диаграммы после ее создания. Список свойств см. в разделе Свойства разброса.

Примеры

свернуть все

Создание вектора x координаты и используйте randn функция для генерации нормально распределенных случайных значений для y. Затем создайте роевую диаграмму из x и y.

x = [ones(1,500) 2*ones(1,500) 3*ones(1,500)];
y1 = 2 * randn(1,500);
y2 = 3 * randn(1,500) + 5;
y3 = 5 * randn(1,500) + 5;
y = [y1 y2 y3];
swarmchart(x,y)

Figure contains an axes. The axes contains an object of type scatter.

Создание трех наборов x и y координаты. Используйте randn функция для генерации случайных значений для y.

x1 = ones(1,500);
x2 = 2 * ones(1,500);
x3 = 3 * ones(1,500);
y1 = 2 * randn(1,500);
y2 = [randn(1,250) randn(1,250) + 4];
y3 = 5 * randn(1,500) + 5;

Создайте роторную диаграмму первого набора данных и укажите однородный размер маркера 5. Затем позвоните hold on для построения графика второго и третьего наборов данных вместе с первым набором данных. Звонить hold off для освобождения состояния удержания осей.

swarmchart(x1,y1,5)
hold on
swarmchart(x2,y2,5)
swarmchart(x3,y3,5)
hold off

Figure contains an axes. The axes contains 3 objects of type scatter.

Прочитайте BicycleCounts.csv набор данных в расписание, называемое tbl. Этот набор данных содержит данные о движении велосипедов за определенный период времени. Отображение первых пяти строк tbl.

tbl = readtable(fullfile(matlabroot,'examples','matlab','data','BicycleCounts.csv'));
tbl(1:5,:)
ans=5×5 table
         Timestamp              Day         Total    Westbound    Eastbound
    ___________________    _____________    _____    _________    _________

    2015-06-24 00:00:00    {'Wednesday'}     13          9            4    
    2015-06-24 01:00:00    {'Wednesday'}      3          3            0    
    2015-06-24 02:00:00    {'Wednesday'}      1          1            0    
    2015-06-24 03:00:00    {'Wednesday'}      1          1            0    
    2015-06-24 04:00:00    {'Wednesday'}      1          1            0    

Создание вектора x с названием дня из каждого наблюдения и другим вектором y с наблюдаемым велосипедным движением. Затем создайте роевую диаграмму из x и yи укажите маркер точки ('.'). На графике показано распределение велосипедного движения по дням недели.

daynames = ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"];
x = categorical(tbl.Day,daynames);
y = tbl.Total;
swarmchart(x,y,'.');

Figure contains an axes. The axes contains an object of type scatter.

Прочитайте BicycleCounts.csv набор данных в расписание, называемое tbl. Создание вектора x с именем дня для каждого наблюдения, другим вектором y с наблюдаемым велосипедным движением и третьим вектором c с часом дня.

Затем создайте роевую диаграмму из x и yи укажите размер маркера как 20. Укажите цвета маркеров как векторные c. Значения векторного индекса в карте цветов фигуры. Таким образом, цвета изменяются в соответствии с часом для каждой точки данных. Используйте 'filled' возможность заливки маркеров цветом вместо отображения их в виде полых окружностей.

tbl = readtable(fullfile(matlabroot,'examples','matlab','data','BicycleCounts.csv'));
daynames = ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"];
x = categorical(tbl.Day,daynames);
y = tbl.Total;
c = hour(tbl.Timestamp);
swarmchart(x,y,20,c,'filled');

Figure contains an axes. The axes contains an object of type scatter.

Прочитайте BicycleCounts.csv набор данных в расписание, называемое tbl. Создание вектора x с именем дня для каждого наблюдения, другим вектором y с наблюдаемым велосипедным движением и третьим вектором c с часом дня. Затем создайте роевую диаграмму из x и yи укажите размер маркера как 5и цвета маркеров в виде вектора c. Позвоните в swarmchart функция с аргументом return s, чтобы можно было изменить диаграмму после ее создания.

tbl = readtable(fullfile(matlabroot,'examples','matlab','data','BicycleCounts.csv'));
daynames = ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"];
x = categorical(tbl.Day,daynames);
y = tbl.Total;
c = hour(tbl.Timestamp);
s = swarmchart(x,y,5,c);

Figure contains an axes. The axes contains an object of type scatter.

Изменение форм кластеров в каждом x расположение, так что точки равномерно и случайным образом распределены и интервал ограничен не более 0.5 единицы данных.

s.XJitter = 'rand';
s.XJitterWidth = 0.5;

Figure contains an axes. The axes contains an object of type scatter.

Создание пары x и y координаты. Используйте randn функция для генерации случайных значений для y. Затем создайте роевую диаграмму с заполненными маркерами, которые на 50% прозрачны как на их гранях, так и на их краях.

x1 = ones(1,500);
x2 = 2 * ones(1,500);
x = [x1 x2];
y1 = 2 * randn(1,500);
y2 = [randn(1,250) randn(1,250) + 4];
y = [y1 y2];
swarmchart(x,y,'filled','MarkerFaceAlpha',0.5,'MarkerEdgeAlpha',0.5)

Figure contains an axes. The axes contains an object of type scatter.

Прочитайте BicycleCounts.csv набор данных в расписание, называемое tbl. Этот набор данных содержит данные о движении велосипедов за определенный период времени. Отображение первых пяти строк tbl.

tbl = readtable(fullfile(matlabroot,'examples','matlab','data','BicycleCounts.csv'));
tbl(1:5,:)
ans=5×5 table
         Timestamp              Day         Total    Westbound    Eastbound
    ___________________    _____________    _____    _________    _________

    2015-06-24 00:00:00    {'Wednesday'}     13          9            4    
    2015-06-24 01:00:00    {'Wednesday'}      3          3            0    
    2015-06-24 02:00:00    {'Wednesday'}      1          1            0    
    2015-06-24 03:00:00    {'Wednesday'}      1          1            0    
    2015-06-24 04:00:00    {'Wednesday'}      1          1            0    

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

daynames = ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"];
x = categorical(tbl.Day,daynames);
yEast = tbl.Eastbound;
yWest = tbl.Westbound;

Создание разметки мозаичной диаграммы в 'flow' расположение плиток таким образом, чтобы оси заполняли доступное пространство в компоновке. Позвоните в nexttile функция для создания объекта оси и возврата его как ax1. Затем создайте роевую диаграмму данных в восточном направлении путем передачи ax1 в swarmchart функция.

tiledlayout('flow')
ax1 = nexttile;
y = tbl.Eastbound;
swarmchart(ax1,x,y,'.');

Figure contains an axes. The axes contains an object of type scatter.

Повторите процесс, чтобы создать объект второй оси и роторную диаграмму для трафика в западном направлении.

ax2 = nexttile;
y = tbl.Westbound;
s = swarmchart(ax2,x,y,'.');

Figure contains 2 axes. Axes 1 contains an object of type scatter. Axes 2 contains an object of type scatter.

Входные аргументы

свернуть все

x-координаты, заданные как скаляр, вектор или матрица. Размер и форма x зависит от формы данных. В этой таблице описаны наиболее распространенные ситуации.

Тип графикаУказание координат
Одиночная точка

Определить x и y как скаляры. Например:

swarmchart(1,1)

Один набор точек

Определить x и y как любая комбинация векторов строк или столбцов одинаковой длины. Например:

x = randi(3,100,1);
y = randn(1,100);
swarmchart(x,y)

Несколько наборов точек разных цветов

Если все наборы имеют одинаковые координаты x или y, укажите общие координаты как вектор, а другие координаты - как матрицу. Длина вектора должна соответствовать одной из размерностей матрицы. Например:

x = randi(2,1,100); 
y = [randn(100,1) randn(100,1)+5];
swarmchart(x,y,100)
Если матрица квадратная, swarmchart отображает отдельный набор точек для каждого столбца в матрице.

Либо укажите x и y в виде матриц одинакового размера. В этом случае swarmchart строит графики для каждого столбца y по соответствующему столбцу x. Например:

x = randi(2,100,2);
y = [randn(100,1) randn(100,1)+5];
swarmchart(x,y,100)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical

координаты y, заданные как скаляр, вектор или матрица. Размер и форма y зависит от формы данных. В этой таблице описаны наиболее распространенные ситуации.

Тип графикаУказание координат
Одиночная точка

Определить x и y как скаляры. Например:

swarmchart(1,1)

Один набор точек

Определить x и y как любая комбинация векторов строк или столбцов одинаковой длины. Например:

x = randi(3,100,1);
y = randn(1,100);
swarmchart(x,y)

Несколько наборов точек разных цветов

Если все наборы имеют одинаковые координаты x или y, укажите общие координаты как вектор, а другие координаты - как матрицу. Длина вектора должна соответствовать одной из размерностей матрицы. Например:

x = randi(2,1,100); 
y = [randn(100,1) randn(100,1)+5];
swarmchart(x,y,100)
Если матрица квадратная, swarmchart отображает отдельный набор точек для каждого столбца в матрице.

Либо укажите x и y в виде матриц одинакового размера. В этом случае swarmchart строит графики для каждого столбца y по соответствующему столбцу x. Например:

x = randi(2,100,2);
y = [randn(100,1) randn(100,1)+5];
swarmchart(x,y,100)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical | datetime | duration

Размер маркера, заданный как числовой скаляр, вектор, матрица или пустой массив ([]). Размер определяет площадь каждого маркера в точках в квадрате. Пустой массив задает размер по умолчанию, равный 36 точкам. Способ задания размера зависит от способа задания x и yи как ты хочешь, чтобы сюжет выглядел. В этой таблице описаны наиболее распространенные ситуации.

Требуемые размеры маркераx и y szПример

Одинаковый размер для всех точек

Любая действительная комбинация векторов или матриц, описанных для x и y.

Скаляр

Определить x как вектор, y в виде матрицы, и sz как скаляр.

x = randi(2,1,100); 
y = randn(100,1); 
swarmchart(x,y,100)

Различный размер для каждой точки

Векторы одинаковой длины

  • Вектор с той же длиной, что и x и y.

  • Матрица по крайней мере с одним размером, соответствующим длинам x и y. Указание матрицы полезно для отображения нескольких маркеров с различными размерами в каждом местоположении (x, y).

Определить x, y, и sz в качестве векторов.

x = randi(2,1,100); 
y = randn(100,1); 
sz = randi([70 2000],100,1);
swarmchart(x,y,sz)

Определить x и y как векторы и sz в виде матрицы.

x = randi(2,1,100); 
y = randn(100,1); 
sz = randi([70 2000],100,2);
swarmchart(x,y,sz)

Различный размер для каждой точки

По крайней мере один из x или y является матрицей для печати нескольких наборов данных

  • Вектор с тем же количеством элементов, что и точки в каждом наборе данных.

  • Матрица, размер которой совпадает с размером x или y матрица.

Определить x как вектор, y в виде матрицы, и sz в виде вектора.

x = randi(2,1,100);
y = [randn(100,1) randn(100,1)+5];
sz = randi([70 2000],100,1);
swarmchart(x,y,sz)

Определить x как вектор, y в виде матрицы, и sz в виде матрицы того же размера, что и y.

x = randi(2,1,100); 
y = [randn(100,1) randn(100,1)+5]; 
sz = randi([70 2000],100,2);
swarmchart(x,y,sz)

Цвет маркера, указанный как имя цвета, триплет RGB, матрица триплетов RGB или вектор индексов карты цветов.

  • Имя цвета - имя цвета, например 'red'или короткое имя, например 'r'.

  • Триплет RGB - трехэлементный вектор строки, элементы которого задают интенсивности красной, зеленой и синей составляющих цвета. Интенсивности должны находиться в диапазоне [0,1]; например, [0.4 0.6 0.7]. Триплеты RGB полезны для создания пользовательских цветов.

  • Матрица триплетов RGB - трёхколонная матрица, в которой каждая строка является триплетом RGB.

  • Вектор индексов карты цветов - вектор числовых значений той же длины, что и x и y векторы.

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

Цветовая схемаОпределение цветаПример

Используйте один цвет для всех точек.

Укажите имя цвета или короткое имя из приведенной ниже таблицы или укажите один триплет RGB.

Постройте график одного набора точек и задайте цвет как 'red'.

x = randi(2,1,100); 
y = randn(100,1); 
c = 'red';
swarmchart(x,y,[],c)

Постройте график двух наборов точек и задайте красный цвет с помощью триплета RGB.

x = randi(2,1,100); 
y = randn(100,1); 
c = [0.6 0 0.9];
swarmchart(x,y,[],c)

Назначьте разные цвета каждой точке с помощью карты цветов.

Укажите вектор строки или столбца чисел. Индекс чисел в текущем массиве карты цветов. Наименьшее значение соответствует первой строке в карте цветов, а наибольшее - последней строке. Промежуточные значения отображаются линейно промежуточным строкам.

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

Этот метод можно использовать только в том случае, если x, y, и sz все векторы.

Создание вектора c указывает 100 индексов карты цветов. Постройте график из 100 точек, используя цвета текущей карты цветов. Затем измените карту цветов на winter.

x = randi(2,1,100); 
y = randn(100,1);
c = 1:100;
swarmchart(x,y,[],c)
colormap(gca,'winter')

Создайте пользовательский цвет для каждой точки.

Задайте матрицу m-на-3 триплетов RGB, где m - количество точек на графике.

Этот метод можно использовать только в том случае, если x, y, и sz все векторы.

Создание матрицы c указывает 100 случайных триплетов RGB. Затем создайте роевую диаграмму из 100 точек, используя эти цвета.

x = randi(2,1,100); 
y = randn(100,1); 
c = rand(100,3);
swarmchart(x,y,[],c)

Создайте разные цвета для каждого набора данных.

Укажите матрицу n-на-3 триплетов RGB, где n - количество наборов данных.

Этот метод можно использовать только в том случае, если хотя бы один из x, y, или sz является матрицей.

Создание матрицы c содержит две тройки RGB. Затем постройте график двух наборов данных с использованием этих цветов.

x = randi(2,100,2); 
y = [randn(100,1) randn(100,1)+5]; 
c = [1 0 0; 0 0 1];
swarmchart(x,y,[],c)

Имена цветов и триплеты RGB для общих цветов

Имя цветаКраткое имяТриплет RGBШестнадцатеричный цветовой кодВнешность
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

Вот триплеты RGB и шестнадцатеричные цветовые коды для цветов по умолчанию MATLAB ®, используемых на многих типах графиков.

Триплет RGBШестнадцатеричный цветовой кодВнешность
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

Тип маркера, указанный как одно из значений, перечисленных в этой таблице.

МаркерОписание
'o'Круг
'+'Знак «Плюс»
'*'Звездочка
'.'Пункт
'x'Крест
'_'Горизонтальная линия
'|'Вертикальная линия
's'Квадрат
'd'Алмаз
'^'Треугольник, направленный вверх
'v'Треугольник, направленный вниз
'>'Прямоугольный треугольник
'<'Треугольник, указывающий влево
'p'Пентаграмма
'h'Hexagram

Параметр для заполнения внутреннего пространства маркеров, указанный как 'filled'. Используйте этот параметр для маркеров, имеющих грань, например: 'o' или 'square'. Маркеры, не имеющие грани и содержащие только ребра, не визуализируются ('+', '*', '.', и 'x').

'filled' установка параметра MarkerFaceColor имущества Scatter объект в 'flat' и MarkerEdgeColor свойство для 'none'. В этом случае MATLAB рисует грани маркера, но не кромки.

Целевые оси, указанные как Axes объект, a PolarAxes объект или GeographicAxes объект. Если оси не заданы, MATLAB выводит на график текущие оси или создает Axes объект, если он не существует.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: swarmchart(randi(4,500,1),randn(500,1),'MarkerFaceColor','red') указывает красные маркеры с заливкой.

Примечание

Перечисленные здесь свойства являются только подмножеством. Полный список см. в разделе Свойства разброса.

Тип дрожания (расстояние между точками) вдоль размера x, определяемый как одно из следующих значений:

  • 'none' - Не дрожите точки.

  • 'density' - Дрожание точек, используя оценку плотности ядра y для 2-D диаграмм. Если задать этот параметр в двух измерениях для диаграммы 3-D, точки будут дрожать на основе оценки плотности ядра в третьем измерении. Например, настройка XJitter и YJitter кому 'density' использует оценку плотности ядра z.

  • 'rand' - Случайное дрожание точек с равномерным распределением.

  • 'randn' - Точки дрожания случайным образом с нормальным распределением.

Максимальная величина дрожания (смещение между точками) вдоль измерения x, заданная как неотрицательное скалярное значение в единицах данных.

Например, чтобы установить ширину дрожания равной 90% кратчайшего расстояния между соседними точками, возьмите минимальное расстояние между уникальными значениями x и масштабировать по 0.9.

XJitterWidth = 0.9 * min(diff(unique(x)));

Алгоритмы

Точки на роевой диаграмме дрожат с использованием однородных случайных значений, которые взвешиваются по оценке плотности ядра Гаусса y и относительное количество точек в каждой точке x местоположение. Это поведение соответствует значению по умолчанию 'density' установка XJitter свойство на Scatter при вызове swarmchart функция.

Максимальный разброс точек в каждой x расположение составляет 90% от наименьшего расстояния между соседними x значения по умолчанию:

spread = 0.9 * min(diff(unique(x)));

Можно управлять спредом, установив XJitterWidth свойство на Scatter объект.

См. также

Функции

Свойства

Представлен в R2020b