[英]How can I assign a color range to edges in igraph plot in R based on edge attributes?
我有一個大型社交網絡 plot,我正在嘗試使用個人之間的聯系強度進行顏色編碼。 在mock_table
中,個體列在a
和b
列中,每個連接的強度在c
列中給出。
我成功地將這些強度值正確分配給edge.width
function,但是,當我嘗試將其應用於edge.color
時,這些值沒有正確對齊。 plot 中的 colors 確實代表sn_color
,但它們沒有分配給正確的邊緣。 最厚的邊緣(最強的連接,最大c
值)也應該有最深的顏色,反之亦然。
以下是我當前代碼的簡化版本:
mock_table <- as.data.frame(cbind(a=c("PO", "BL", "MA", "AL", "BL"), b=c("MA", "BO", "ED", "MA", "MA"), c=as.numeric(c(8,41,10,23,50))))
mock_table$c <- as.numeric(as.character(mock_table$c))
sn_graph <- graph_from_data_frame(d=mock_table, vertices = c("PO", "BL", "MA", "AL", "BO", "ED"), directed = FALSE)
sn_proximity <- (mock_table$"c")
sn_colorrange <- colorRampPalette(c("yellow", "orange", "red", "darkred"))
sn_color <- sn_colorrange(length(sn_proximity))
plot(sn_graph,
edge.width=(1/3)*(sn_proximity),
edge.color=sn_color
)
誰能幫我弄清楚如何正確分配這個調色板? 非常感謝!
編輯以包含可重現的示例代碼。
您需要准確告訴 plot 使用哪種顏色。 如果您想為每個漸變使用不同的顏色,那么您可以執行類似的操作
plot(sn_graph,
edge.width=(1/3)*(sn_proximity),
edge.color=sn_color[order(sn_proximity)]
)
否則可能更常見的是設置固定數量的 bin 然后使用cut()
使顏色更有意義
n_bins <- 5
sn_color <- sn_colorrange(n_bins)
plot(sn_graph,
edge.width=(1/3)*(sn_proximity),
edge.color=sn_color[cut(sn_proximity, breaks=n_bins )]
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.