r - 同一图形上不同类型边的不同审美尺度

标签 r ggraph

我正在尝试使用 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)

这是图表当前的样子:

badgraph.png

我想要这样的东西:

fixedgraph.png

理想情况下,我能够在 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/

相关文章:

r - 无法让 ggraph 显示树状图的标签

r - 使用 tidytext 将字数大小作为图层添加到共现网络图表上的节点大小

r - 如何用矩形矩阵求解R中的线性方程组

r - knitr 中 R markdown 的全局注释选项

r - 读取制表符分隔文件 R 时出现问题

r - ggraph 中的图例线粗细

r - 即使在函数调用中,data.table 操作也应该具有全局范围吗?

r - data.frame 函数内部 $ 和 [] 之间的区别

r - 如何将 GGRAPH 包安装到最新的 R (v.3.3.2)