sar*_*rgg 7 r ggplot2 pie-chart ggrepel
我正在用 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)
Run Code Online (Sandbox Code Playgroud)
然后我想利用 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)
Run Code Online (Sandbox Code Playgroud)
但我收到以下警告“警告:忽略未知参数:位置”
并弄乱了标签。
任何人都知道如何将标签的正确定位与 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
Run Code Online (Sandbox Code Playgroud)
首先,您需要在coord_polar(). 我会用 'dplyr' 来做,但你可以使用任何你喜欢的东西:
library('dplyr')
df <- df %>%
arrange(treatment, desc(annotation)) %>%
group_by(treatment) %>%
mutate(text_y = cumsum(value) - value/2)
df
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)# 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)
Run Code Online (Sandbox Code Playgroud)
现在添加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")
Run Code Online (Sandbox Code Playgroud)