我正在尝试使用 ggraph 包可视化一些网络。我的网络有两种不同类型的边,A 和 B,它们具有不同的尺度。我想按类型为边缘着色(我已经完成了),并通过值调整它们的不透明度。但是,由于所有边都显示在一起,并且 A 和 B 具有不同的比例,使用 aes(alpha=value)
会在 A 和 B 上使用整个比例,因此所有比例较小的边(此处 A)实际上是不可见的。我如何分离 A 和 B 的 alpha 比例,以便 alpha 对应于它们的内部比例? (即,当 A 边缘处于最大 A 且 B 边缘处于最大 B 时,alpha = 1)
我在下面包含了一个小例子:
library(ggplot2)
library(igraph)
library(ggraph)
nodes <- data.frame(id=seq(1,5),label=c('a','b','c','d','e'))
edges <- data.frame(from=c(3,3,4,1,5,3,4,5),
to= c(2,4,5,5,3,4,5,1),
type=c('A','A','A','A','A','B','B','B'),
value=c(1,.2,.5,.3,1,5,12,8))
net <- graph_from_data_frame(d=edges,vertices=nodes,directed=T)
ggraph(net,layout='stress') +
geom_edge_fan(aes(color=type,alpha=value)) +
geom_node_label(aes(label=label),size=5)
这是图表当前的样子:
我想要这样的东西:
理想情况下,我能够在 R 中执行此操作,而不是在 GIMP 中执行复杂的编辑过程。
我希望这可以通过 set_scale_edge_alpha
实现,但我无法在任何地方找到解决方案。我从here看到这可以用 ggnewscale
来完成,但这似乎需要绘制两个单独的对象,而且似乎也没有专门改变边缘美学的功能。有没有一种简单的方法可以在不绘制两个重叠图的情况下做到这一点?
谢谢!
最佳答案
在绘图之前自己重新调整值可能会更好。您可以将每个组内的值缩放到 0-1 的比例
edges <- edges %>%
group_by(type) %>%
mutate(value = scales::rescale(value))
关于r - 同一图形上不同类型边的不同审美尺度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72880329/