簡體   English   中英

同一圖上不同類型邊的不同美學尺度

[英]Different aesthetic scales for different types of edges on same graph

我正在嘗試使用 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)

這是圖表當前的樣子:

壞圖.png

我想要看起來像這樣的東西:

固定圖.png

理想情況下,我可以在 R 中做到這一點,而不是在 GIMP 中進行復雜的編輯過程。

我希望這可以通過set_scale_edge_alpha ,但我無法在任何地方找到解決方案。 我從這里看到這可以用ggnewscale完成,但這似乎需要繪制兩個單獨的對象,而且似乎也沒有專門改變邊緣美學的功能。 有沒有一種簡單的方法可以在不繪制兩個重疊圖的情況下做到這一點?

謝謝!

在繪圖之前自己重新調整值可能會更好。 您可以在每組中將值縮放到 0-1 的比例

edges <- edges %>% 
  group_by(type) %>% 
  mutate(value = scales::rescale(value))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM