1引言
今天分享的这个 R 包可以比较 自由的可视化我们的数据的置信区间, ggfan
, 让你的图更加优雅!
githup 地址:
https://github.com/jasonhilton/ggfan
参考文档地址:
https://github.com/jasonhilton/ggfan/blob/master/vignettes/geom_fan.md
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)
映射区间并更改
p + geom_interval(aes(colour=..Interval..), intervals=c(0,0.5,0.9,0.99))
使用 geom_fan 表现出渐变效果
p <- ggplot(fake_df, aes(x=x,y=y)) +
geom_fan()
print(p)
4叠加上线图层
ggplot(fake_df, aes(x=x, y= y)) +
geom_fan() +
geom_interval() +
scale_linetype_manual(values=c("solid", "dashed", "dotted"))
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))
6美化
更改颜色:
ggplot(fake_df, aes(x=x,y=y)) +
geom_fan() +
theme_bw() +
scale_fill_distiller(palette="Spectral")
ggplot(fake_df, aes(x=x,y=y)) +
geom_fan() +
theme_bw() +
scale_fill_gradient(low="red", high="pink")
匹配区间:
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))
分面和分组
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)
线分组:
p <- ggplot(fake_df_sex, aes(x=x, y=y,group=Sex,colour=Sex)) +
geom_interval() +
theme_bw()
print(p)
渐变分组:
p <- ggplot(fake_df_sex, aes(x=x, y=y,group=Sex)) +
geom_fan() +
theme_bw()
print(p)
7结尾
感兴趣的小伙伴们可以尝试一下。
文章来源于老俊俊的生信笔记 ,作者JunJunLab