我正在尝试使用gGraph包来可视化一些网络。我的网络有两种不同的边缘,A和B,它们有不同的尺度。我想用类型来着色边缘(我已经这样做了),并通过值来调整它们的不透明度。但是,由于所有的边都显示在一起,而且A和B有不同的尺度,所以使用aes(alpha=value)时,A和B都使用整个尺度,所以所有具有较小比例尺的边缘(此处A)实际上都是不可见的。我如何将A和B的α尺度分开,使α与它们的内部尺度相对应?(即,当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来完成,但这似乎需要绘制两个独立的对象,而且似乎也没有一个函数可以专门更改边缘美学。有没有一个简单的方法来做到这一点,而不绘制两个重叠的图表?
谢谢!
发布于 2022-07-06 13:02:07
在策划之前,最好是自己重新考虑一下这些价值观。可以将值缩放到每个组中的0-1标度。
edges <- edges %>%
group_by(type) %>%
mutate(value = scales::rescale(value))https://stackoverflow.com/questions/72880329
复制相似问题