我正在使用ggplot2绘制多个饼图,并成功将标签绘制在正确的位置,如下所示:
df <- data.frame(annotation=rep(c("promoter", "intergenic", "intragene", "5prime", "3prime"), 3), value=c(69.5, 16, 10.7, 2.5, 1.3, 57.2, 18.8, 20.2, 2.1, 1.7, 50.2, 32.2, 15.3, 1.2, 1.1), treatment=rep(c("treated1", "treated2", "untreated"), c(5, 5, 5)))
library(ggplot2)
ggplot(data = df, aes(x = "", y = value, fill = annotation)) +
geom_bar(stat = "identity") +
geom_text(aes(label = value), position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y") +
facet_grid(.~treatment)
然后我想使用ggrepel,以便小切片数字不重叠:
library(ggrepel)
ggplot(data = df, aes(x = "", y = value, fill = annotation)) +
geom_bar(stat = "identity") +
geom_text_repel(aes(label = value), position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y") +
facet_grid(.~treatment)
但我得到以下警告 “警告:忽略未知参数:位置”
并搞砸了标签。
任何人都知道如何将标签的正确位置与geom_text_repel或其他替代方案结合起来?
谢谢!
sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Scientific Linux 7.2 (Nitrogen)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggrepel_0.6.5 ggplot2_2.2.1 limma_3.26.9
loaded via a namespace (and not attached):
[1] Rcpp_0.12.8 digest_0.6.12 grid_3.3.2 plyr_1.8.4
[5] gtable_0.2.0 magrittr_1.5 scales_0.4.1 stringi_1.1.5
[9] reshape2_1.4.2 lazyeval_0.2.0 labeling_0.3 tools_3.3.2
[13] stringr_1.2.0 munsell_0.4.3 colorspace_1.3-2 tibble_1.3.0
答案 0 :(得分:3)
首先,您需要在coord_polar()
之前制作一个包含标签位置的正确列。我会用&#39; dplyr&#39;但你可以随意使用:
library('dplyr')
df <- df %>%
arrange(treatment, desc(annotation)) %>%
group_by(treatment) %>%
mutate(text_y = cumsum(value) - value/2)
df
# A tibble: 15 x 4 # Groups: treatment [3] annotation value treatment text_y <chr> <dbl> <chr> <dbl> 1 promoter 69.5 treated1 34.75 2 intragene 10.7 treated1 74.85 3 intergenic 16.0 treated1 88.20 4 5prime 2.5 treated1 97.45 5 3prime 1.3 treated1 99.35 6 promoter 57.2 treated2 28.60 7 intragene 20.2 treated2 67.30 8 intergenic 18.8 treated2 86.80 9 5prime 2.1 treated2 97.25 10 3prime 1.7 treated2 99.15 11 promoter 50.2 untreated 25.10 12 intragene 15.3 untreated 57.85 13 intergenic 32.2 untreated 81.60 14 5prime 1.2 untreated 98.30 15 3prime 1.1 untreated 99.45
现在,当我们使用text_y
作为y
geom_text()
美学时,文字和标签将位于列的中间。
coord_polar()
之前的情节:
ggplot(data = df, aes(x = "", y = value, fill = annotation)) +
geom_bar(stat = "identity") +
geom_label(aes(label = value, y = text_y)) +
facet_grid(.~treatment)
现在添加label_repel
并转换坐标:
ggplot(data = df, aes(x = "", y = value, fill = annotation)) +
geom_bar(stat = "identity") +
geom_label_repel(aes(label = value, y = text_y)) +
facet_grid(. ~ treatment) +
coord_polar(theta = "y")