У меня есть 42 переменных, и я вычислил корреляционную матрицу для них в Matlab. Теперь я хотел бы визуализировать его с помощью schemaball. Есть ли у кого-нибудь какие-либо предложения/примеры того, как это можно сделать в Matlab? Следующие снимки объяснят мою точку зрения лучше:
В изображениях каждая парабола между переменными будет означать силу корреляции между ними. Чем толще линия, тем больше корреляция. Я предпочитаю стиль изображения 1 больше, чем стиль на картинке 2, где я использовал разные цвета, чтобы подчеркнуть силу корреляции.
Kinda закончен, я думаю.. код можно найти здесь, в github. Документация включена в файл.
Желтый/пурпурный цвет (для положительной/отрицательной корреляции) настраивается, а также шрифт ярлыков и углы, на которых нанесены метки, поэтому вы можете получить фантазию, если хотите, и равномерно распределить их вдоль периметр/группа некоторые /...
Если вы хотите фактически напечатать эти графики или использовать их за пределами matlab, я предлагаю использовать векторные форматы (например, eps). Это также раздражает то, что текст изменяется при изменении масштаба изображения, но я не знаю, как это исправить, не взломав функцию масштабирования:/
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 и обновит ссылку как можно скорее.
Есть некоторые отличия от вклада Gunther Struyf:
Следуйте примерам демонстрационных, пользовательских ярлыков и настроек объявлений.
Примечание: первая цифра экспортировалась с 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). Тем не менее, если вы попытаетесь сохранить фигуру, файл будет иметь обычный старый сглаженный рендеринг, поэтому здесь будет изображение с изображением экрана Гюнтера:
Важное обновление:
Теперь вы можете сделать это в Matlab с представлением FileExchange:
http://www.mathworks.com/matlabcentral/fileexchange/48576-circulargraph
Здесь приведен пример использования Matlab:
http://uk.mathworks.com/examples/matlab/3859-circular-graph-examples
Что дает такие красивые сюжеты:
Кстати, Cleve Moler (Математический математик MathWorks) показал пример такого рода сюжетов в своем последнем сообщении в блоге (не так как как в вашем примере, а соединительные линии прямые, а не параболические, но выглядят функционально). К сожалению, он не включил код напрямую, но если вы оставите ему комментарий к сообщению, он обычно очень хочет поделиться вещами.
Что может быть еще лучше для вас, так это то, что он также применяет (и на этот раз) код, чтобы переставлять строки/столбцы массива, чтобы максимизировать пространственную близость узлов с высокой степенью связывания, а не произвольно упорядочивать их вокруг длина окружности. В итоге вы получаете "полумесяц" в виде огибающей соединительных линий, причем толстая часть полумесяца представляет собой наиболее высокосвязные узлы.
К сожалению, однако, я подозреваю, что если вам нужно усилить его код, чтобы получить очень узкие линии с высоким разрешением в ваших примерах, то MATLAB в настоящее время не сглаживает графику еще не совсем.
Недавно я экспериментировал с данными MATLAB и D3 visualization library для похожих графиков - существует несколько связанных типов круговых визуализаций, которые вы можете быть заинтересованным, и многие из них являются интерактивными. Еще один полезный, искушенный и свободно доступный вариант - Circos, который, вероятно, отвечает за большинство более симпатичных версий этих графиков, которые у вас есть видел в популярной прессе.