【问题标题】:Draw a shape over plot using ggplot in R?在 R 中使用 ggplot 在绘图上绘制形状?
【发布时间】:2020-11-19 18:26:31
【问题描述】:

我想知道如何在ggplot 上的某些点周围绘制一个循环或形状,或者甚至有可能吗?

我同时使用igraphggnet2 来创建一个情节...一个玩具示例如下所示。基本上,我正在创建一个简单的网络,使用igraph 的集群算法来告诉哪些节点应该集群在一起。然后我使用ggnet2 绘制网络,并为与它们的集群对应的节点着色。我正在使用ggnet2 进行绘图,因为它与ggplot2 兼容,因此我可以在绘图中添加额外的ggplot2 参数/参数。在下面的示例中,我实际上是使用geom_point 覆盖igraph 节点。

library(igraph)
library(GGally)

direction <- c(2,1,3,1,4,1,5,1,3,2,4,2,5,2,4,3,5,3,5,4)
gr <- matrix(direction, nrow = 2)
x1 <- 10.59
x2 <- 15.74
x3 <- 5
x4 <- 18
x5 <- 7

RImp <- data.frame(x1,x2,x3,x4,x5)
nam <- names(RImp)
RImp <- as.numeric(RImp)
Rint <- c(2.96, 1.34, 1.27, 1.1, 2.22, 1.24, 3.11,
          2.52, 0.96, 1.08)

net.bg <- make_graph(gr, 5)

com <- cluster_optimal(net.bg)
V(net.bg)$color <- com$membership
group <- V(net.bg)$color
group <- factor(group)
colrs <- adjustcolor( c("yellow", "red", "blue", "black")) 

g <- set_graph_attr(net.bg, "layout", layout_with_kk(net.bg))
colrs <- adjustcolor( c("yellow", "red", "blue", "black")) 
colorC <- colrs[group]


 pp <- ggnet2(g,
             mode = "circle", 
             size = 0,
             label = nam,
             edge.size = Rint, 
             edge.color = "grey") +
  theme(legend.text = element_text(size = 10), legend.position = "none") +
   geom_label(aes(label = nam),nudge_y = 0.08) +
   geom_point(aes(fill = RImp), size = RImp, col = colorC)
pp
 

这将产生如下内容:

因此,节点 1,2 和 3 聚集在一起......并且 4 和 5 聚集在一起。但我想知道是否可以做这样的事情(我很快使用图像编辑软件创建了这个):

所以,在上面的例子中,我想使用ggplot在某些节点周围绘制一个形状、多边形或其他东西...这可能吗?我不知道从哪里开始!?

【问题讨论】:

标签: r ggplot2 igraph


【解决方案1】:

你可以试试

pp + ggalt::geom_encircle(aes(group = c(1,1,2,2,2)), alpha = 0.1, fill = c("red","red", "green","green","green"))

使用您提供的代码将节点 x3-x5 显示为红色,因此我对它们进行了相应的着色。

【讨论】:

  • 哇,这比我预期的要容易。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 2020-08-10
  • 2018-07-23
  • 1970-01-01
  • 2014-05-16
  • 2016-08-05
相关资源
最近更新 更多