Cómo visualizar la matriz de correlación como schemaball en Matlab
Tengo 42 variables y he calculado la matriz de correlación para ellas en Matlab. Ahora me gustaría visualizarlo con un schemaball. ¿Alguien tiene alguna sugerencia / experiencia sobre cómo se podría hacer esto en Matlab? Las siguientes imágenes explicarán mejor mi punto:
En las imágenes cada parábola entre variables significaría la fuerza de correlación entre ellas. Cuanto más gruesa es la línea, más correlación. Prefiero el estilo de imagen 1 más que el estilo en la imagen 2 donde he utilizado diferentes colores para resaltar la fuerza de la correlación.
5 answers
Un poco terminado, supongo.. el código se puede encontrar aquí en github. La documentación se incluye en el archivo.
El color amarillo/magenta (para correlación positiva/negativa) es configurable, así como el tamaño de fuente de las etiquetas y los ángulos en los que se trazan las etiquetas, por lo que puede obtener fantasía si lo desea y no distribuirlas uniformemente a lo largo del perímetro/agrupar algunos/...
Si realmente desea imprimir estos gráficos o usarlos fuera de matlab, sugiero usar vector formatos (por ejemplo, eps). También es molesto que el texto cambie de tamaño cuando se acerca / se aleja, pero no conozco ninguna manera de arreglar eso sin hackear la función de zoom: /
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-12 19:43:27
Terminé y envié mi versión al FEX: schemaball y actualizaré el enlace lo antes posible.
Hay algunas diferencias con la contribución de Gunther Struyf:
- Puede devolver los controladores al objeto gráfico para una personalización manual completa
- Las etiquetas están orientadas para permitir la máxima legibilidad de izquierda a derecha
- La figura se estira para ajustar las etiquetas, dejando los ejes sin cambios
- La sintaxis solo requiere matriz de correlaciones (pero permite entradas opcionales)
- Optimizado para el rendimiento.
Siga ejemplos de demostración, etiquetas personalizadas y personalización creativa.
Nota: la primera figura fue exportada con saveas()
, todos los demás con 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)
El mapa de colores predeterminado:
Para mejorar la representación en pantalla puede iniciar MATLAB con el interruptor experimental -hgVersion 2
que produce gráficos anti/aliased por defecto ahora (fuente: HG2 update | Undocumented Matlab). Sin embargo, si intenta guardar la figura, el archivo tendrá la representación anti-aliased habitual, así que aquí hay una imagen de printscreen del schemaball de Gunther:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:57
Actualización Importante:
Ahora puede hacer esto en Matlab con el envío FileExchange:
Http://www.mathworks.com/matlabcentral/fileexchange/48576-circulargraph
Hay un ejemplo de Matlab aquí:
Http://uk.mathworks.com/examples/matlab/3859-circular-graph-examples
Que da este tipo de parcelas hermosas:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-11 16:18:07
Coincidentemente, Cleve Moler (Matemático Jefe de MathWorks) mostró un ejemplo de este tipo de trama en su más reciente entrada de blog (no tan hermosa como las de su ejemplo, y las líneas de conexión son rectas en lugar de parabólicas, pero parece funcional). Desafortunadamente, no incluyó el código directamente, pero si le dejas un comentario en la publicación, generalmente está muy dispuesto a compartir cosas.
Lo que podría ser aún más agradable para usted es que él también aplica (y esta vez incluye) código para permutar las filas / columnas de la matriz con el fin de maximizar la proximidad espacial de nodos altamente conectados, en lugar de ordenarlos aleatoriamente alrededor de la circunferencia. Terminas con una envoltura en forma de'media luna' de líneas de conexión, con la parte gruesa de la media luna representando los nodos más conectados.
Desafortunadamente, sin embargo, sospecho que si necesita mejorar su código para obtener las líneas muy estrechas y de alta resolución en sus gráficas de ejemplo, entonces los gráficos actualmente no suavizados de MATLAB aún no están a la altura.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-11 09:43:16
Recientemente he estado experimentando con datos de MATLAB y la biblioteca de visualización D3 para gráficos similares: hay varios tipos relacionados de visualizaciones circulares en las que puede estar interesado y muchas de ellas son interactivas. Otra opción útil, bien horneada y disponible gratuitamente es Circos que probablemente es responsable de la mayoría de las versiones más bonitas de estos gráficos que ha visto en la prensa popular.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-24 19:59:15