我已经使用以下数据绘制了下图的圆形图,但我无法显示最窄部分的标签。有什么线索吗? 我尝试减小标签的大小,但是不起作用。
数据
level1 level2 size
Interface A1 191730
Interface A2 524340
Interface minor 2529189
Interface P1 1273072
Interface P2 126295
Interface P3 279050
Interface P4 74326
Interface P5 16646
No structure A1 654914.333333333
No structure A2 4965368.33333333
No structure minor 13654304.3333333
No structure P1 6627555.33333333
No structure P2 1131774
No structure P3 2011299
No structure P4 485273
No structure P5 116248
Non-interface A1 317491
Non-interface A2 978807
Non-interface minor 3689632
Non-interface P1 1690987
Non-interface P2 192730
Non-interface P3 468848
Non-interface P4 125529
Non-interface P5 21676
代码:
#create PieDonut
require(ggplot2)
require(moonBook)
require(webr)
PieDonut(data,
aes(pies= level2, donuts = level1, count = size),
ratioByGroup=T,
addDonutLabel = F,
labelpositionThreshold = 0.4,
donutLabelSize = 3,
use.labels = F,
title="Title",
maxx = 1.5,
r0=0,showPieName=FALSE)
结果:
注意:作为一种解决方法,我使用了森伯斯特包装。但是我认为这看起来很混乱,这就是为什么我要使用其他图。不过,这是我的代码和剧情。
# install ggsunburst
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("rPython")) install.packages("rPython")
install.packages("http://genome.crg.es/~didac/ggsunburst/ggsunburst_0.0.10.tar.gz", repos=NULL, type="source")
library(ggsunburst)
library(ggrepel)
names(data) = c("parent","node", "size")
data$location <- data$parent
write.table(data, file = 'data.csv', row.names = F, sep = ",")
sb <- sunburst_data('data.csv', type = 'node_parent', sep = ",", node_attributes = c("location","size"))
sb$rects[!sb$rects$leaf,]$location <- sb$rects[!sb$rects$leaf,]$name
colors= c("#2DA86D", "#A72D98", "#423FA9", "#4BC88B", "#5FCE98", "#73D4A5", "#87DAB2", "#9BE0BF", "#AFE6CB", "#C3ECD8", "#D7F2E5",
"#C74BB7", "#CD5FBF", "#D373C7", "#D987CF", "#E09BD7", "#E6AFDF", "#ECC3E7", "#F2D7EF", "#5F5DC8", "#716FCE", "#8381D4", "#9493DA", "#A6A5E0", "#B8B7E6", "#C9C9EC", "#DBDBF2")
n_total_size = 42115268
p <- ggsunburst::sunburst(sb,
rects.fill = colors,
rects.fill.aes=0,
rects.size =2,
node_labels.size = 5,
leaf_labels.size = 3,
blank = T,
leaf_labels = T,
rects.color = "white",
node_labels = T,
node_labels.color = "white",
node_labels.min = 0)+
geom_label_repel(data = sb$leaf_labels,
aes(x=x,
y=0,
label=paste(round(size/n_total_size * 100, 2), '%')),
colour = colors[4:27],
nudge_y = .55,
segment.size = 0.7,
show.legend = T,
segment.colour = "black",
fontface = 'bold')
使用ggrepel和ggsunburst的荣誉,但是我同意可以改善结果。
这不是理想的解决方案,但是您可以单独绘制那些具有较小size
的标签。您可以基于sb$leaf_labels
分割size
,并手动设置new_y
library(ggsunburst)
data <- read.table(header = T, text = "
level1 level2 size
Interface A1 191730
Interface A2 524340
Interface minor 2529189
Interface P1 1273072
Interface P2 126295
Interface P3 279050
Interface P4 74326
Interface P5 16646
No-structure A1 654914.333333333
No-structure A2 4965368.33333333
No-structure minor 13654304.3333333
No-structure P1 6627555.33333333
No-structure P2 1131774
No-structure P3 2011299
No-structure P4 485273
No-structure P5 116248
Non-interface A1 317491
Non-interface A2 978807
Non-interface minor 3689632
Non-interface P1 1690987
Non-interface P2 192730
Non-interface P3 468848
Non-interface P4 125529
Non-interface P5 21676")
names(data) = c("parent","node", "size")
data$location <- data$parent
write.table(data, file = 'data.csv', row.names = F, sep = ",")
sb <- sunburst_data('data.csv', type = 'node_parent', sep = ",", node_attributes = c("location","size"))
sb$rects[!sb$rects$leaf,]$location <- sb$rects[!sb$rects$leaf,]$name
colors= c("#2DA86D", "#A72D98", "#423FA9", "#4BC88B", "#5FCE98", "#73D4A5", "#87DAB2", "#9BE0BF", "#AFE6CB", "#C3ECD8", "#D7F2E5",
"#C74BB7", "#CD5FBF", "#D373C7", "#D987CF", "#E09BD7", "#E6AFDF", "#ECC3E7", "#F2D7EF", "#5F5DC8", "#716FCE", "#8381D4", "#9493DA", "#A6A5E0", "#B8B7E6", "#C9C9EC", "#DBDBF2")
n_total_size = 42115268
sb$leaf_labels <- within(sb$leaf_labels,{
percentage = paste("(",round(size/n_total_size * 100, 2),"%)",sep = "")
new_label = paste(label,percentage, sep = " ")
})
text_size <- 3
wide <- subset(sb$leaf_labels, size > 191730.0)
narrow <- subset(sb$leaf_labels, size <= 191730.0)
narrow$new_y <- c(1, 1.25, 1, .75, 1, 1, 1.25)
ggsunburst::sunburst(sb,
rects.fill = colors,
rects.fill.aes=0,
rects.size =0,
node_labels.size = 5,
leaf_labels.size = 3,
blank = T,
leaf_labels = F,
rects.color = "white",
node_labels = T,
node_labels.color = "white",
node_labels.min = 0
) +
geom_segment(data = wide, aes(x=x, xend=x, y=y_out, yend=.1), size = .5) +
geom_segment(data = narrow, aes(x=x, xend=x, y=y_out, yend=new_y), size = .5) +
geom_text(data = wide, aes(x=x, y=.15, label=new_label, angle=angle, hjust=hjust), size = text_size) +
geom_text(data = narrow, aes(x=x, y=new_y, label=new_label, angle=0, hjust=hjust), size = text_size)