Как визуализировать матрицу корреляции в виде схемы в Matlab

43

У меня есть 42 переменных, и я вычислил корреляционную матрицу для них в Matlab. Теперь я хотел бы визуализировать его с помощью schemaball. Есть ли у кого-нибудь какие-либо предложения/примеры того, как это можно сделать в Matlab? Следующие снимки объяснят мою точку зрения лучше:

Изображение 539

Изображение 540

В изображениях каждая парабола между переменными будет означать силу корреляции между ними. Чем толще линия, тем больше корреляция. Я предпочитаю стиль изображения 1 больше, чем стиль на картинке 2, где я использовал разные цвета, чтобы подчеркнуть силу корреляции.

  • 0
    Вы предполагаете, что матрица симметрична? как насчет родственных ценностей?
  • 1
    вы можете взломать этот mathworks.com/matlabcentral/fileexchange/… чтобы получить то, что вы хотите
Показать ещё 8 комментариев
Теги:
correlation
plot
visualization
graph-visualization

5 ответов

24
Лучший ответ

Kinda закончен, я думаю.. код можно найти здесь, в github. Документация включена в файл.

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

Если вы хотите фактически напечатать эти графики или использовать их за пределами matlab, я предлагаю использовать векторные форматы (например, eps). Это также раздражает то, что текст изменяется при изменении масштаба изображения, но я не знаю, как это исправить, не взломав функцию масштабирования:/

schemaball % demo

Изображение 6327

schemaball(arrayfun(@num2str,1:10,'uni',false), rand(10).^8,11,[0.1587 0.8750],[0.8333 1],2*pi*sin(linspace(0,pi/2-pi/20,10)))

Изображение 6328

schemaball(arrayfun(@num2str,1:50,'uni',false), rand(50).^50,9)

Изображение 6329

  • 1
    действительно добавьте их! какие наборы инструментов вы используете?
  • 1
    не слишком ли много просить о поддержке отрицательных весов? т.е. положительные корреляции в желтом и отрицательные в пурпурном?
Показать ещё 14 комментариев
25

Я закончил и отправил мою версию в FEX: schemaball и обновит ссылку как можно скорее.

Есть некоторые отличия от вклада Gunther Struyf:

  • Вы можете вернуть дескрипторы графическому объекту для полной ручной настройки
  • Ярлыки ориентированы так, чтобы обеспечить максимальную читаемость слева направо.
  • Рисунок растягивается, чтобы вставлять метки, оставляя оси без изменений
  • Синтаксис требует только матрицы корреляций (но допускает дополнительные входы)
  • Оптимизирован для производительности.

Следуйте примерам демонстрационных, пользовательских ярлыков и настроек объявлений. Примечание: первая цифра экспортировалась с saveas(), все остальные с export_fig.

schemaball

Изображение 6330Изображение 6331

x      = rand(10).^3;
x(:,3) = 1.3*mean(x,2);
schemaball(x, {'Hi','how','is','your','day?', 'Do','you','like','schemaballs?','NO!!'})

Изображение 6332

h = schemaball;
set(h.l(~isnan(h.l)), 'LineWidth',1.2)
set(h.s, 'MarkerEdgeColor','red','LineWidth',2,'SizeData',100)
set(h.t, 'EdgeColor','white','LineWidth',1)

Изображение 6333

Цвета по умолчанию:

Изображение 6334

Чтобы улучшить рендеринг на экране, вы можете запустить MATLAB с помощью экспериментального переключателя -hgVersion 2, который по умолчанию создает анти-алиасную графику (источник: Обновление HG2 | Недокументированный Matlab). Тем не менее, если вы попытаетесь сохранить фигуру, файл будет иметь обычный старый сглаженный рендеринг, поэтому здесь будет изображение с изображением экрана Гюнтера:

Изображение 6335

  • 0
    Я нахожусь на пути написания функции, запросы на функциональные возможности могут быть размещены здесь. Когда я это сделаю, я обновлю свой ответ. Также я не смог опубликовать изображение в комментарии.
  • 0
    +1 за попытку HG2 - это начинает выглядеть действительно хорошо. В какой версии MATLAB вы делали это? Может быть интересно посмотреть, как это выглядит в пререлизе 13b.
Показать ещё 5 комментариев
5

Важное обновление:

Теперь вы можете сделать это в Matlab с представлением FileExchange:

http://www.mathworks.com/matlabcentral/fileexchange/48576-circulargraph

Здесь приведен пример использования Matlab:

http://uk.mathworks.com/examples/matlab/3859-circular-graph-examples

Что дает такие красивые сюжеты:

Изображение 6336

Изображение 6337

  • 0
    Отлично! Спасибо!
3

Кстати, Cleve Moler (Математический математик MathWorks) показал пример такого рода сюжетов в своем последнем сообщении в блоге (не так как как в вашем примере, а соединительные линии прямые, а не параболические, но выглядят функционально). К сожалению, он не включил код напрямую, но если вы оставите ему комментарий к сообщению, он обычно очень хочет поделиться вещами.

Что может быть еще лучше для вас, так это то, что он также применяет (и на этот раз) код, чтобы переставлять строки/столбцы массива, чтобы максимизировать пространственную близость узлов с высокой степенью связывания, а не произвольно упорядочивать их вокруг длина окружности. В итоге вы получаете "полумесяц" в виде огибающей соединительных линий, причем толстая часть полумесяца представляет собой наиболее высокосвязные узлы.

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

  • 0
    +1 Спасибо за ответ Сэм =)
  • 1
    @SamRoberts: код доступен на FTP-сайте Xerox PARC, упомянутом в статье. На самом деле я только что опубликовал ответ на основе этого, прежде чем я увидел этот вопрос :)
2

Недавно я экспериментировал с данными MATLAB и D3 visualization library для похожих графиков - существует несколько связанных типов круговых визуализаций, которые вы можете быть заинтересованным, и многие из них являются интерактивными. Еще один полезный, искушенный и свободно доступный вариант - Circos, который, вероятно, отвечает за большинство более симпатичных версий этих графиков, которые у вас есть видел в популярной прессе.

  • 0
    И как вы можете воспользоваться пакетами, которые вы перечислили с MATLAB? Пример был бы великолепен.
  • 0
    Конечно, я постараюсь предоставить несколько примеров кода на следующий день или около того, но в целом использование D3 - это всего лишь вопрос экспорта ваших данных Matlab в формат JSON, который соответствует вашему выбору визуализации, используя что-то вроде JSONLab. Это, конечно, визуализируется вне среды matlab, но, согласно ответу Сэма выше, легко отформатировать / создать JSON для разреженной матрицы совпадений и загрузить ее непосредственно в нечто подобное D3, то есть еще не использовал Circos.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню