科研星球

R教程:ggfan优雅的可视化你的置信区间

1引言

今天分享的这个 R 包可以比较 自由的可视化我们的数据的置信区间ggfan, 让你的图更加优雅!

0 (9).jpg

githup 地址:

https://github.com/jasonhilton/ggfan

参考文档地址:

https://github.com/jasonhilton/ggfan/blob/master/vignettes/geom_fan.md

0 (1).jpg

2安装

install.packages("ggfan")
# or
devtools::install_github("jasonhilton/ggfan")

3使用

加载 R 包

library(ggplot2)
library(magrittr)
library(tidyr)
library(dplyr)
library(ggfan)

构造测试数据

# generate mean and variance for sequence of samples over time
N_time <- 50
N_sims <- 1000
time <- 1:N_time
mu <- time**2 * 0.03 + time * 0.3
sds <- exp(time**2 * -0.001 + time * 0.1)

# simulate 1000 samples from each time point
fake_data <- sapply(time, function(i) rnorm(N_sims, mu[i], sds[i]))

# gather into a long-form, tidy dataset
fake_df <- data.frame(x=time, t(fake_data)) %>% gather(key=Sim, value=y, -x)

head(fake_df)
##   x Sim          y
## 1 1  X1  1.6572459
## 2 2  X1  0.8267447
## 3 3  X1 -0.8102278
## 4 4  X1  3.0413644
## 5 5  X1  6.3048493
## 6 6  X1  3.9750555

基本绘图

p <- ggplot(fake_df, aes(x=x,y=y)) +
geom_interval()
print(p)

0.jpg

映射区间并更改

p + geom_interval(aes(colour=..Interval..), intervals=c(0,0.5,0.9,0.99))

0 (2).jpg

使用 geom_fan 表现出渐变效果

p <- ggplot(fake_df, aes(x=x,y=y)) +
geom_fan()
print(p)

0 (3).jpg

4叠加上线图层

ggplot(fake_df, aes(x=x, y= y)) +
geom_fan() +
geom_interval() +
scale_linetype_manual(values=c("solid""dashed""dotted"))

0 (4).jpg

5修改区间对应填充范围

quants <- c(2.5,10,25,50,75,90,97.5)
q_df <- as.data.frame(sapply(quants*0.01, qnorm, mu, sds))

names(q_df) <-  gsub("^","q", quants)
q_df <- cbind(q_df,time)
q_df <-gather(q_df,key=quantile, value=value, -time)

p + geom_line(data=q_df, mapping=aes(x=time,y=value, group=quantile, linetype=quantile))

0 (5).jpg

6美化

更改颜色:

ggplot(fake_df, aes(x=x,y=y)) +
geom_fan() +
theme_bw() +
scale_fill_distiller(palette="Spectral")

0 (8).jpg

ggplot(fake_df, aes(x=x,y=y)) +
geom_fan() +
theme_bw() +
scale_fill_gradient(low="red", high="pink")

0 (6).jpg

匹配区间:

ggplot(fake_df, aes(x=x, y=y)) +
geom_fan(intervals=c(50,80,95)/100) +
theme_bw() +
geom_line(data=q_df, mapping=aes(x=time,y=value, group=quantile, linetype=quantile))

0 (7).jpg

分面和分组

fake_df_sex <- fake_df %>% mutate(y=-fake_df$y, Sex="Male")

fake_df_sex <- rbind(fake_df %>% mutate(Sex="Female"), fake_df_sex)

ggplot(fake_df_sex, aes(x=x,y=y)) +
geom_fan() +
theme_bw() +
scale_fill_gradientn(colours = terrain.colors(10)) +
facet_wrap(~Sex)

0 (10).jpg

线分组:

p <- ggplot(fake_df_sex, aes(x=x, y=y,group=Sex,colour=Sex)) +
geom_interval() +
theme_bw()
print(p)

0 (11).jpg

渐变分组:

p <- ggplot(fake_df_sex, aes(x=x, y=y,group=Sex)) +
geom_fan() +
theme_bw()
print(p)

0 (12).jpg

7结尾

感兴趣的小伙伴们可以尝试一下。


文章来源于老俊俊的生信笔记 ,作者JunJunLab

没有账号?