首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同一图上不同类型边的不同审美尺度

同一图上不同类型边的不同审美尺度
EN

Stack Overflow用户
提问于 2022-07-06 08:38:50
回答 1查看 74关注 0票数 3

我正在尝试使用gGraph包来可视化一些网络。我的网络有两种不同的边缘,A和B,它们有不同的尺度。我想用类型来着色边缘(我已经这样做了),并通过值来调整它们的不透明度。但是,由于所有的边都显示在一起,而且A和B有不同的尺度,所以使用aes(alpha=value)时,A和B都使用整个尺度,所以所有具有较小比例尺的边缘(此处A)实际上都是不可见的。我如何将A和B的α尺度分开,使α与它们的内部尺度相对应?(即,当A边在最大值A,B边在最大B处时,alpha=1 )

下面我列举了一个小例子:

代码语言:javascript
复制
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来完成,但这似乎需要绘制两个独立的对象,而且似乎也没有一个函数可以专门更改边缘美学。有没有一个简单的方法来做到这一点,而不绘制两个重叠的图表?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-06 13:02:07

在策划之前,最好是自己重新考虑一下这些价值观。可以将值缩放到每个组中的0-1标度。

代码语言:javascript
复制
edges <- edges %>% 
  group_by(type) %>% 
  mutate(value = scales::rescale(value))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72880329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档