可视化:density与ridgeline

手机软件开发 2024-9-18 00:30:04 51 0 来自 中国
  今天我们来谈谈生信分析中的常规图形 -- 密度图与山脊图 (density,ridgeline)。为什么要把这个两图一起介绍呢?因为这两个图关系非常亲密,本质上呈现的意义是相同的。密度图,常用于展示一组变量的取值分布。而山脊图则常用于展示多分组时某一变量在各分组中的取值分布。这么看来,山脊图就像是密度图的团购形式。下面我们就一起来见证一下吧!
density

  首先,我们先绘制密度图看看,使用ggplot2内置数据集diamonds来绘图,这里为了方便跟后面的山脊图做对比,调整了分面和图例的顺序:
library(ggplot2)p <- ggplot(diamonds,aes(x=price,fill=cut)) +             geom_density() +             facet_grid(factor(cut,levels=c('Ideal','Premium','Very Good','Good','Fair')) ~.) +             theme_bw() +             guides(title='cut', fill = guide_legend(reverse = TRUE))p结果如下:
1.png ridgeline

  在相同的数据基础上,我们使用ggridges包来绘制山脊图:
library(ggridges)p <- ggplot(diamonds, aes(x = price, y = cut, fill = cut)) +            geom_density_ridges() +            theme_ridges() +             theme(legend.position = "none")p结果如下:
前面说过山脊图是团购形式的密度图,所以这里说一个想要注意的地方,ggridges包不能画只有一个组别的山脊图,意思就是至少得有两个组别。
比较

  从上面的两张图可以看出,从分布的形态来说,密度图和山脊图的结果虽然不能说一模一样,但也可以相提并论了。细节上来说,密度图开始端的曲线呈现了断崖,而山脊图却是连续的曲线。当然,这个差异是可以修正的,下面我们就选取上面数据集的一个子集来说明,选取cut为Ideal的数据来进一步作图。
ideal <- subset(diamonds, cut == 'Ideal')den <- density(ideal$price, n=600)dendata <- data.frame(price=den$x, y=den$y)p <- ggplot(dendata,aes(x=price,y=y)) +             geom_polygon(fill='#FDE725FF') +             geom_line() +             theme_minimal() +             scale_y_continuous(breaks=0,labels='Ideal') +             labs(y='')p结果如下:
  现在这个密度图跟上面的山脊图相比,分布形态看起来不能说一模一样,可以说是完全相似。当然,山脊图还是一些其他方面的呈现形式,比如,可以将颜色映射为随X轴值的大小而变化(将函数geom_density_ridges替换为geom_density_ridges_gradient),还可以修改曲线为直方图 (在函数geom_density_ridges里面添加stat="binline"语句)。详细的用法,大家可以自行摸索,这里就不在赘述了。


往期绘图

单细胞:不同亚群的基因平均表达热图
可视化:bubble
可视化:scatterplot
可视化:barplot
可视化:泡泡图
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:49, Processed in 0.155438 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表