无法更改圆形树状图中的边颜色

问题描述 投票:0回答:1

这是代码:

# Libraries
library(ggraph)
library(igraph)
library(tidyverse)
library(RColorBrewer) 

# create a data frame giving the hierarchical structure of your individuals
d1=data.frame(from="origin", to=paste("group", seq(1,10), sep=""))
d2=data.frame(from=rep(d1$to, each=10), to=paste("subgroup", seq(1,100), sep="_"))
edges=rbind(d1, d2)

# create a vertices data.frame. One line per object of our hierarchy
vertices = data.frame(
  name = unique(c(as.character(edges$from), as.character(edges$to))) , 
  value = runif(111)
) 

# Create a graph object
mygraph <- graph_from_data_frame( edges, vertices=vertices )


## plot1 -- test ---------------------------------------------------------------

ggraph(mygraph, 'dendrogram', circular = TRUE) +
  geom_edge_diagonal0() +
  geom_node_text(aes(filter = leaf, angle = node_angle(x, y), label = name),
                 hjust = 'outward', size = 2
  ) +
  geom_node_point(aes(filter = leaf, x = x*1.07, y=y*1.07, colour=group, size=value, alpha=0.2)) +
  scale_colour_manual(values= rep( brewer.pal(9,"Paired") , 30)) +
  scale_size_continuous( range = c(0.1,10) ) +
  theme_void() +
  theme(
    legend.position="none",
    plot.margin=unit(c(0,0,0,0),"cm"),
  ) +
  expand_limits(x = c(-1.3, 1.3), y = c(-1.3, 1.3))

它工作正常,但它还没有我想要的一切。我想将几条边组装在一起,并像这张照片一样给它们上色。我能够使用带有 geom_edge_diagonal0 函数的 edge_width 参数来更改边缘宽度,但我不知道如何像这张图片中那样重新创建红色和蓝色空间。有什么线索吗?

谢谢:)

r ggplot2 dendrogram ggraph
1个回答
1
投票

也许是这样的?下面的解释和评论。

library(ggforce) # for new geom_arc_bar layer; it's created by the same person
# who created ggraph, so the two packages should play well together.

# take data creation out of ggraph() in order to add group information to it
p.data <- create_layout(mygraph, 'dendrogram', circular = TRUE) %>%
  left_join(edges %>% rename(group = from), by = c("name" = "to")) %>%
  mutate(group = ifelse(is.na(group), name, group) %>%
           factor(levels = c("origin", paste0("group", 1:10)),
                  labels = c("origin", 1:10)))

ggraph(mygraph, 'dendrogram', circular = TRUE) +
  
  # new layer added to create coloured background
  geom_arc_bar(data = p.data %>% filter(leaf) %>% count(group),
               aes(x0 = 0, y0 = 0, r0 = 0, r = 1.2, # adjust r here to increase / decrease pie size
                   amount = n, fill = group),
               stat = 'pie', alpha = 0.2, colour = NA) +
  
  geom_edge_diagonal0() +
  geom_node_text(aes(filter = leaf, angle = node_angle(x, y), label = name),
                 hjust = 'outward', size = 2) +
  
  # change data reference for this layer to incorporate group information
  geom_node_point(data = p.data %>% filter(leaf),
                  aes(x = x*1.07, y=y*1.07, colour=group, size=value),
                  alpha = 0.5) +
  
  # add fill to aesthetics so the same palette (with different alpha values) 
  # can be reused for both colour & fill
  scale_colour_manual(values= rep( brewer.pal(9,"Paired") , 30),
                      aesthetics = c("colour", "fill")) +
  
  scale_size_continuous( range = c(0.1,10) ) +
  theme_void() +
  theme(
    legend.position="none",
    plot.margin=unit(c(0,0,0,0),"cm"),
  ) +
  expand_limits(x = c(-1.3, 1.3), y = c(-1.3, 1.3))

© www.soinside.com 2019 - 2024. All rights reserved.