Как визуализировать корреляционную матрицу как schemaball в Matlab
У меня есть 42 переменные, и я рассчитал корреляционную матрицу для них в Matlab. Теперь я хотел бы визуализировать его с schemaball. У кого какие идеи / опыт как это можно сделать в MATLAB? Следующие фотографии объяснят мою точку зрения лучше:
на рисунках каждая парабола между переменными будет означать силу корреляции между ними. Чем толще линия, тем больше соотношение. Я предпочитаю стиль изображения 1 больше, чем стиль на рисунке 2, где я использовал разные цвета, чтобы подчеркнуть силу корреляции.
5 ответов
вроде закончил, я думаю.. код можно найти здесь, в github. Документация включена в файл.
желтый/пурпурный цвет (для положительной/отрицательной корреляции) настраивается, а также размер шрифта меток и углы, под которыми нанесены метки, поэтому вы можете получить фантазии, если хотите, и не распределять их равномерно по периметру/группа некоторые/...
Если вы хотите напечатать эти графики или использовать их вне matlab, я предлагаю использовать векторные форматы (например, пенополистирола). Это также раздражает, что текст изменяется при увеличении/уменьшении масштаба, но я не знаю, как это исправить без взлома функции масштабирования:/
schemaball % demo
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)))
schemaball(arrayfun(@num2str,1:50,'uni',false), rand(50).^50,9)
Я закончил и представил моя версия до FEX: schemaball и обновим ссылку как можно скорее.
есть некоторые различия с Гунтер StruyfС:
- вы можете вернуть дескрипторы графическому объекту для полной ручной настройки
- ярлыки ориентированы для того чтобы позволить максимальной считываемости Лев-к-rigth
- диаграмма протягивает для приспособления ярлыков внутри, выходя оси без изменений
- синтаксис требует только матрицы корреляций (но допускает необязательные входы)
- оптимизирован для производительности.
соблюдать примеры демо, пользовательские этикетки и творческая настройка.
Примечание: первая цифра была экспортирована с saveas()
, все остальные с export_fig
.
schemaball
x = rand(10).^3;
x(:,3) = 1.3*mean(x,2);
schemaball(x, {'Hi','how','is','your','day?', 'Do','you','like','schemaballs?','NO!!'})
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)
цветовая карта по умолчанию:
улучшение на экране рендеринг вы можете запустить MATLAB с помощью экспериментального -hgVersion 2
переключатель, который по умолчанию создает анти/сглаженную графику (источник:обновление HG2 / недокументированный Matlab). Однако если вы попытаетесь сохранить фигуру, файл будет иметь обычный старый антиалиазированный рендеринг, поэтому вот изображение schemaball Гюнтера на экране:
важные обновления:
вы можете сделать это в Matlab теперь с представлением FileExchange:
http://www.mathworks.com/matlabcentral/fileexchange/48576-circulargraph
здесь есть пример Matlab:
http://uk.mathworks.com/examples/matlab/3859-circular-graph-examples
Что дает этот вид красивого сюжеты:
по совпадению, Клив Молер (главный математик MathWorks) показал пример именно такого сюжета на своем последнем блоге (не так красиво, как в вашем примере, и соединительные линии прямые, а не параболической, но это выглядит функционально). К сожалению, он не включил код напрямую, но если вы оставите ему комментарий к сообщению, он обычно очень готов поделиться вещами.
Что может быть еще лучше для вас, так это то, что он применяется также (и это время включает) код для перестановки строк/столбцов массива для того, чтобы увеличить пространственную близость взаимосвязанных узлов, а не случайным образом заказать их по окружности. Вы заканчиваете с "полумесяцем" -образной оболочкой соединительных линий, с толстым битом полумесяца, представляющим наиболее сильно связанные узлы.
к сожалению, однако, я подозреваю, что если вам нужно улучшить его код, чтобы получить очень узкие строки с высоким разрешением в ваши примеры графиков, а затем MATLAB в настоящее время не сглаживается графика еще не совсем до этого.
недавно я экспериментировал с данными MATLAB и библиотека визуализации D3 для подобных графиков - существует несколько связанных типов круговых визуализаций, которые могут вас заинтересовать, и многие из них являются интерактивными. Еще один полезный, хорошо запеченный и свободно доступный вариант -Circos что, вероятно, отвечает за большинство более красивых версий этих графиков, которые вы видели в популярной прессе.