Cómo visualizar la matriz de correlación como schemaball en Matlab
plot visualization (5)
Tengo 42 variables y he calculado la matriz de correlación para ellas en Matlab. Ahora me gustaría visualizarlo con una schemaball. ¿Alguien tiene alguna sugerencia / experiencia de cómo se podría hacer esto en Matlab? Las siguientes imágenes explicarán mi punto mejor:
En las imágenes, cada parábola entre las variables significaría la fuerza de la correlación entre ellas. Cuanto más gruesa es la línea, más correlación. Prefiero el estilo de la imagen 1 más que el estilo en la imagen 2 donde he usado diferentes colores para resaltar la fuerza de la correlación.
Casualmente, Cleve Moler (matemático jefe de MathWorks) mostró un ejemplo de este tipo de trama en su publicación de blog más reciente (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 ) Lamentablemente, 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 también aplica (y esta vez incluye) código para permutar las filas / columnas de la matriz para maximizar la proximidad espacial de nodos altamente conectados, en lugar de ordenarlos aleatoriamente alrededor de la circunferencia. Terminas con un sobre 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 parcelas de ejemplo, entonces los gráficos actualmente no anti-alias de MATLAB aún no lo están haciendo.
Recientemente he estado experimentando con los datos de MATLAB y la biblioteca de visualización D3 para obtener gráficos similares. Hay varios tipos relacionados de visualizaciones circulares que pueden interesarte y muchos de ellos son interactivos. Otra opción útil, bien cocida y de libre disponibilidad es Circos que probablemente sea responsable de la mayoría de las versiones más bonitas de estos gráficos que haya visto en la prensa popular.
Terminé y presenté 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 identificadores 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 ajustarse a las etiquetas, dejando los ejes sin cambios
- La sintaxis solo requiere una matriz de correlaciones (pero permite entradas opcionales)
- Optimizado para el rendimiento.
Siga ejemplos de demostración, etiquetas personalizadas y personalización de creatividades. Nota: la primera figura se exportó con saveas()
, todas las 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 color predeterminado:
Para mejorar la representación de pantalla , puede -hgVersion 2
MATLAB con el -hgVersion 2
experimental -hgVersion 2
que produce gráficos anti / alias por defecto ahora (fuente: actualización de HG2 | Matlab sin documentación ). Sin embargo, si intenta guardar la figura, el archivo tendrá el renderizado antialias antiguo normal, así que aquí hay una imagen de pantalla impresa del schemaball de Gunther:
Un poco terminado, supongo ... el código se puede encontrar aquí en github . La documentación está incluida en el archivo.
El color amarillo / magenta (para la 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, para que pueda ser elegante si lo desea y no distribuirlos uniformemente a lo largo del perímetro. agrupar algunos / ...
Si desea imprimir estos gráficos o usarlos fuera de matlab, le sugiero usar formatos de vectores (por ejemplo, eps). También es molesto que el texto cambie de tamaño cuando haces zoom para acercar / alejar, pero no conozco ninguna forma de solucionarlo 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)
Actualización importante:
Puede hacer esto en Matlab ahora con el envío de 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
Lo que le da a este tipo de tramas hermosas: