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

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

SCHEMABALL

enter image description here

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

5 ответов


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

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

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

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


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

есть некоторые различия с Гунтер StruyfС:

  1. вы можете вернуть дескрипторы графическому объекту для полной ручной настройки
  2. ярлыки ориентированы для того чтобы позволить максимальной считываемости Лев-к-rigth
  3. диаграмма протягивает для приспособления ярлыков внутри, выходя оси без изменений
  4. синтаксис требует только матрицы корреляций (но допускает необязательные входы)
  5. оптимизирован для производительности.

соблюдать примеры демо, пользовательские этикетки и творческая настройка. Примечание: первая цифра была экспортирована с 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). Однако если вы попытаетесь сохранить фигуру, файл будет иметь обычный старый антиалиазированный рендеринг, поэтому вот изображение schemaball Гюнтера на экране:

enter image description here


важные обновления:

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

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

здесь есть пример Matlab:

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

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

enter image description here

enter image description here


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

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

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


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