Matlab: построение нескольких точек с одинаковыми координатами - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть некоторые данные, которые я хочу отобразить в MATLAB. Данные состоят из координат x и y точек, которые я хочу. В данный момент я использую функцию plot для построения этих точек.

Данные имеют много точек с одинаковыми координатами. Теперь я хочу, чтобы точки с одинаковыми координатами отображались не как одна точка, а как более толстая точка.

Например, предположим, что точки

1,1

2,1

2,1

3,2

2,1

2,1

1,1

Затем на графике должна быть одна точка с 3,2, но более толстая точка с 1,1 и даже более толстая с 2,1

Может кто-нибудь сказать мне, как это сделать?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2011

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

Во-первых, вам нужно свести свои данные к списку баллов плюс подсчет количества баллов в каждом местоположении.

Например, если у вас есть данные:

xy = [...
    1,1; ...
    2,1; ...
    2,1; ...
    3,2; ...
    2,1; ...
    2,1; ...
    1,1];

Получите уникальные очки и уникальные индексы:

[xyUnique, ignore, ixs] = unique(xy,'rows')

Это довольно болезненно, но мы можем подсчитать количество вхождений каждой уникальной строки, используя вектор ixs (возможно, есть лучший способ).

counts = zeros(size(xyUnique,1),1);
for ix = 1:size(counts,1);
    counts(ix) = sum(ixs == ix);
end

Теперь используйте разброс, чтобы построить график, как вы хотите.

scatter(...
    xyUnique(:,1), ...  %X values
    xyUnique(:,2), ...  %Y values
    counts*20, ...      %Individual marker sizes, note scale factor to make this visible
    'b', ...            %Marker colors
    'filled');          %I think these look better filled 
1 голос
/ 30 июля 2014

Чтобы избежать зацикливания, опираясь на предыдущий пример, попробуйте это:

xy = [...
    1,1; ...
    2,1; ...
    2,1; ...
    3,2; ...
    2,1; ...
    2,1; ...
    1,1];

[xyUnique, ignore, ixs] = unique(xy,'rows')

приведет к

xyUnique =
     1     1
     2     1
     3     2

Далее мы используем функцию hist

[nRows, nCols] = size(xyUnique)
xyCount = hist(ixs,nRows)

Что приводит к

xyCount =
     2     4     1

Каждое значение xyCount является количеством вхождений каждой строки xyUnique.

0 голосов
/ 07 декабря 2011

Используйте команду scatter в форме:

scatter(X,Y,S)

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

Описание:

scatter (X, Y, S) рисует маркеры указанных размеров (S) одним цветом.Этот тип графика также известен как пузырьковый график.

S определяет область каждого маркера (указана в точках ^ 2).S может быть вектором такой же длины, как X и Y или скаляр.Если S - скаляр, MATLAB рисует все маркеры одинакового размера.Если S пусто, используется размер по умолчанию.

Для получения дополнительной информации см. документация .

...