igraph绘图:自定义顶点大小范围及特定值黑色图例制作
igraph 顶点缩放与自定义图例解决方案
Q1:按指定范围线性缩放顶点大小
要把val的取值范围(1-10)映射到顶点大小的2-15区间,用线性缩放公式即可实现,保证最小顶点对应2,最大对应15,其余按比例分配:
# 计算缩放后的顶点大小 scaled_val <- 2 + (val - min(val)) * (15 - 2)/(max(val) - min(val))
把原plot()里的vertex.size = val替换成vertex.size = scaled_val即可,无需保留cex=0.5(scaled_val已经是最终目标大小)。
Q2:生成指定val值的黑色大小图例
只需在legend()中指定目标val值、对应缩放后的大小,同时把点的填充色和边框色都设为黑色:
# 指定要展示的val值 legend_vals <- c(1,4,8,10) # 提取对应缩放后的大小 legend_sizes <- scaled_val[val %in% legend_vals] # 绘制图例 legend(-1.3, -0.9, legend = legend_vals, pch = 21, pt.bg = "black", # 填充黑色 col = "black", # 边框黑色 pt.cex = legend_sizes/10, # 匹配图中顶点大小的比例调整 bty="n", ncol = 2 # 调整列数让图例更紧凑 )
注:pt.cex是相对于R默认点大小的比例,用legend_sizes/10是因为igraph默认顶点大小基准值约为10,能保证图例点与图中顶点大小完全匹配。
完整可运行代码
library(igraph) g <- make_ring(10) val = 1:10 pal <- c("pink", "steelblue") V(g)$color <- c(rep("pink", 5), rep("steelblue", 5)) # Q1:计算缩放后的顶点大小 scaled_val <- 2 + (val - min(val)) * (15 - 2)/(max(val) - min(val)) pdf("aa.pdf", width = 7, height = 7) plot(g, layout = layout_with_fr, vertex.size = scaled_val, vertex.frame.color = NA, edge.color = adjustcolor("#c7c7c7", alpha.f = 0.9)) # Q2:绘制自定义黑色图例 legend_vals <- c(1,4,8,10) legend_sizes <- scaled_val[val %in% legend_vals] legend(-1.3, -0.9, legend = legend_vals, pch = 21, pt.bg = "black", col = "black", pt.cex = legend_sizes/10, bty="n", ncol = 2) dev.off()
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

