son principiantes posiciones poner para notas los letras leer las guitarra faciles diagrama dedos cuales con como aprender acordes r data-visualization igraph graph-visualization circos

principiantes - cuales son los acordes de la guitarra



Diagrama de acorde de red se aflige en R (2)

Hice un montón de cambios a edgebundleR . Estos están ahora en el repositorio principal. El siguiente código debería acercarte al resultado deseado. ejemplo vivo

# devtools::install_github("garthtarr/edgebundleR") library(edgebundleR) library(igraph) library(data.table) d <- structure(list(ID = c("KP1009", "GP3040", "KP1757", "GP2243", "KP682", "KP1789", "KP1933", "KP1662", "KP1718", "GP3339", "GP4007", "GP3398", "GP6720", "KP808", "KP1154", "KP748", "GP4263", "GP1132", "GP5881", "GP6291", "KP1004", "KP1998", "GP4123", "GP5930", "KP1070", "KP905", "KP579", "KP1100", "KP587", "GP913", "GP4864", "KP1513", "GP5979", "KP730", "KP1412", "KP615", "KP1315", "KP993", "GP1521", "KP1034", "KP651", "GP2876", "GP4715", "GP5056", "GP555", "GP408", "GP4217", "GP641"), Type = c("B", "A", "B", "A", "B", "B", "B", "B", "B", "A", "A", "A", "A", "B", "B", "B", "A", "A", "A", "A", "B", "B", "A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "A", "B", "B", "B", "B", "B", "A", "B", "B", "A", "A", "A", "A", "A", "A", "A"), Set = c(15L, 1L, 10L, 21L, 5L, 9L, 12L, 15L, 16L, 19L, 22L, 3L, 12L, 22L, 15L, 25L, 10L, 25L, 12L, 3L, 10L, 8L, 8L, 20L, 20L, 19L, 25L, 15L, 6L, 21L, 9L, 5L, 24L, 9L, 20L, 5L, 2L, 2L, 11L, 9L, 16L, 10L, 21L, 4L, 1L, 8L, 5L, 11L), Loc = c(3L, 2L, 3L, 1L, 3L, 3L, 3L, 1L, 2L, 1L, 3L, 1L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 3L, 3L, 3L, 2L, 3L, 1L, 3L, 3L, 1L, 3L, 2L, 3L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L)), .Names = c("ID", "Type", "Set", "Loc"), class = "data.frame", row.names = c(NA, -48L)) # let''s add Loc to our ID d$key <- d$ID d$ID <- paste0(d$Loc,".",d$ID) # Get vertex relationships sets <- unique(d$Set[duplicated(d$Set)]) rel <- vector("list", length(sets)) for (i in 1:length(sets)) { rel[[i]] <- as.data.frame(t(combn(subset(d, d$Set ==sets[i])$ID, 2))) } rel <- rbindlist(rel) # Get the graph g <- graph.data.frame(rel, directed=F, vertices=d) clr <- as.factor(V(g)$Loc) levels(clr) <- c("salmon", "wheat", "lightskyblue") V(g)$color <- as.character(clr) V(g)$size = degree(g)*5 # Plot plot(g, layout = layout.circle, vertex.label=NA) edgebundle( g )->eb eb

Tengo algunos datos similares a la data.frame d como sigue.

d <- structure(list(ID = c("KP1009", "GP3040", "KP1757", "GP2243", "KP682", "KP1789", "KP1933", "KP1662", "KP1718", "GP3339", "GP4007", "GP3398", "GP6720", "KP808", "KP1154", "KP748", "GP4263", "GP1132", "GP5881", "GP6291", "KP1004", "KP1998", "GP4123", "GP5930", "KP1070", "KP905", "KP579", "KP1100", "KP587", "GP913", "GP4864", "KP1513", "GP5979", "KP730", "KP1412", "KP615", "KP1315", "KP993", "GP1521", "KP1034", "KP651", "GP2876", "GP4715", "GP5056", "GP555", "GP408", "GP4217", "GP641"), Type = c("B", "A", "B", "A", "B", "B", "B", "B", "B", "A", "A", "A", "A", "B", "B", "B", "A", "A", "A", "A", "B", "B", "A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "A", "B", "B", "B", "B", "B", "A", "B", "B", "A", "A", "A", "A", "A", "A", "A"), Set = c(15L, 1L, 10L, 21L, 5L, 9L, 12L, 15L, 16L, 19L, 22L, 3L, 12L, 22L, 15L, 25L, 10L, 25L, 12L, 3L, 10L, 8L, 8L, 20L, 20L, 19L, 25L, 15L, 6L, 21L, 9L, 5L, 24L, 9L, 20L, 5L, 2L, 2L, 11L, 9L, 16L, 10L, 21L, 4L, 1L, 8L, 5L, 11L), Loc = c(3L, 2L, 3L, 1L, 3L, 3L, 3L, 1L, 2L, 1L, 3L, 1L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 3L, 3L, 3L, 2L, 3L, 1L, 3L, 3L, 1L, 3L, 2L, 3L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L)), .Names = c("ID", "Type", "Set", "Loc"), class = "data.frame", row.names = c(NA, -48L))

Quiero explorar las relaciones entre los miembros de d$ID usando un diagrama de acordes similar al de abajo.

Se ve que hay varias opciones para hacerlo en R ( Diagrama de acorde en R ).

En mis datos, las relaciones están de acuerdo con d$Set (no direccional) y la agrupación está de acuerdo con d$Loc . Los siguientes son mis intentos de mapear estas relaciones como un diagrama de acordes.

Intento 1: usando igraph

He intentado igraph como sigue con el tamaño del nodo según el grado.

# Get vertex relationships sets <- unique(d$Set[duplicated(d$Set)]) rel <- vector("list", length(sets)) for (i in 1:length(sets)) { rel[[i]] <- as.data.frame(t(combn(subset(d, d$Set ==sets[i])$ID, 2))) } library(data.table) rel <- rbindlist(rel) # Get the graph g <- graph.data.frame(rel, directed=F, vertices=d) clr <- as.factor(V(g)$Loc) levels(clr) <- c("salmon", "wheat", "lightskyblue") V(g)$color <- as.character(clr) # Plot plot(g, layout = layout.circle, vertex.size=degree(g)*5, vertex.label=NA)

¿Cómo modificar la trama para que se parezca a la primera figura? Parece que no hay opciones para modificar igraph layout.circle .

Intento 2: Usar Circlize

Parece que son más suaves las curvas de Bézier y la agrupación en el circlize R paquete. Pero aquí no puedo agrupar los nodos, así como ajustar su tamaño según el grado, ya que se trazan como sectores.

par(mar = c(1, 1, 1, 1), lwd = 0.1, cex = 0.7) circos.initialize(factors = as.factor(d$ID), xlim = c(0, 10)) circos.trackPlotRegion(factors = as.factor(d$ID), ylim = c(0, 0.5), bg.col = V(g)$color, bg.border = NA, track.height = 0.05) for(i in 1:nrow(rel)) { circos.link(rel[i,1], 0, rel[i,2],0, h = 0.4) }

Aquí sin embargo no hay opciones para modificar los nodos. ¿De hecho solo se pueden trazar como sectores? En este caso, ¿hay alguna forma de modificar los sectores en nodos circulares de tamaño según el grado?

Intento 3: usar edgebundleR ( https://github.com/garthtarr/edgebundleR )

require(edgebundleR) edgebundle(g,tension = 0.1,cutoff = 0.5, fontsize = 18,padding=40)

Parece que aquí hay opciones limitadas para modificar la estética.


Odio agregar otra respuesta para un problema diferente, pero no conozco ninguna forma de manejar la pregunta adicional planteada en el comentario. El comentario preguntó cómo podríamos colorear los bordes. En general, la respuesta sería fácil, pero en este caso, la respuesta requiere volver a escribir gran parte del código en edgebundleR o requiere un truco. Voy a ir con el truco de abajo.

library(edgebundleR) library(igraph) library(data.table) d <- structure(list(ID = c("KP1009", "GP3040", "KP1757", "GP2243", "KP682", "KP1789", "KP1933", "KP1662", "KP1718", "GP3339", "GP4007", "GP3398", "GP6720", "KP808", "KP1154", "KP748", "GP4263", "GP1132", "GP5881", "GP6291", "KP1004", "KP1998", "GP4123", "GP5930", "KP1070", "KP905", "KP579", "KP1100", "KP587", "GP913", "GP4864", "KP1513", "GP5979", "KP730", "KP1412", "KP615", "KP1315", "KP993", "GP1521", "KP1034", "KP651", "GP2876", "GP4715", "GP5056", "GP555", "GP408", "GP4217", "GP641"), Type = c("B", "A", "B", "A", "B", "B", "B", "B", "B", "A", "A", "A", "A", "B", "B", "B", "A", "A", "A", "A", "B", "B", "A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "A", "B", "B", "B", "B", "B", "A", "B", "B", "A", "A", "A", "A", "A", "A", "A"), Set = c(15L, 1L, 10L, 21L, 5L, 9L, 12L, 15L, 16L, 19L, 22L, 3L, 12L, 22L, 15L, 25L, 10L, 25L, 12L, 3L, 10L, 8L, 8L, 20L, 20L, 19L, 25L, 15L, 6L, 21L, 9L, 5L, 24L, 9L, 20L, 5L, 2L, 2L, 11L, 9L, 16L, 10L, 21L, 4L, 1L, 8L, 5L, 11L), Loc = c(3L, 2L, 3L, 1L, 3L, 3L, 3L, 1L, 2L, 1L, 3L, 1L, 1L, 2L, 2L, 1L, 3L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 3L, 3L, 3L, 2L, 3L, 1L, 3L, 3L, 1L, 3L, 2L, 3L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L)), .Names = c("ID", "Type", "Set", "Loc"), class = "data.frame", row.names = c(NA, -48L)) # let''s add Loc to our ID d$key <- d$ID d$ID <- paste0(d$Loc,".",d$ID) # Get vertex relationships sets <- unique(d$Set[duplicated(d$Set)]) rel <- vector("list", length(sets)) for (i in 1:length(sets)) { rel[[i]] <- as.data.frame(t(combn(subset(d, d$Set ==sets[i])$ID, 2))) } rel <- rbindlist(rel) # Get the graph g <- graph.data.frame(rel, directed=F, vertices=d) clr <- as.factor(V(g)$Loc) levels(clr) <- c("salmon", "wheat", "lightskyblue") V(g)$color <- as.character(clr) # Plot plot(g, layout = layout.circle, vertex.size=degree(g)*5, vertex.label=NA) edgebundle( g )->eb eb # temporary hack to accomplish edge coloring # requires newest Github version of htmlwidgets # devtools::install_github("ramnathv/htmlwidgets") # add some imaginary colors E(g)$color <- c("purple","green","black")[floor(runif(length(E(g)),1,4))] # now append these edge attributes to our htmlwidget x eb$x$edges <- jsonlite::toJSON(get.data.frame(g,what="edges")) eb <- htmlwidgets::onRender( eb, '' function(el,x){ // loop through each of our edges supplied // and change the color x.edges.map(function(edge){ var source = edge.from.split(".")[1]; var target = edge.to.split(".")[1]; d3.select(el).select(".link.source-" + source + ".target-" + target) .style("stroke",edge.color); }) } '' ) eb