Подтвердить что ты не робот

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

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

SCHEMABALL

enter image description here

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

4b9b3361

Ответ 1

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

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

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

schemaball % demo

enter image description here

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)))

enter image description here

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

enter image description here

Ответ 2

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

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

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

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

schemaball

enter image description hereenter image description here

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

enter image description here

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)

enter image description here

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

enter image description here

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

enter image description here

Ответ 4

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

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

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

Ответ 5

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