下图是一张常见的二维核密度散点图,能够清晰直观的反映出数据之间的分布趋势,颜色越红的位置数据越集中分布。今天分享的笔记是在R语言中绘制该图的两种常见方法,提供过程代码。
论文中常见的这种展示两组数据之间分布趋势的图,其实也是一种散点图,只是用不同颜色来映射了点的密度大小,通常是渐变色来展示数据的变化规律。
这个包结合了散点图和密度图的特点,是 ggplot2 的一个扩展,使用户能够创建点密度图,其中点的颜色和大小可以表示数据点在特定区域的局部密度,从而直观地揭示出数据的集中趋势。
install.packages("ggpointdensity")
library(ggpointdensity)
library(viridis) # 使用viridis提供的翠绿色标度:scale_fill_viridis()
安装完成后开始绘图,首先生成测试数据
df <- data.frame("x" = rnorm(10000), "y" = rnorm(10000))
> head(df)
x y
1 0.2505781 0.05379511
2 -0.2779240 0.75343075
3 -1.7247357 0.24985048
4 -2.0067049 -0.44410484
5 -1.2918083 -0.05027016
6 0.3658382 -0.46777918
如果你有实际数据,也可以按照这种方式进行整理,比如在excel中整理好,分成两列,分别代表横轴和纵轴,然后导入R语言中进行绘图。
ggplot(df)+
geom_pointdensity(aes(x=x,y=y))
绘图的核心函数geom_pointdensity生成散点密度图,如果直接运行,结果图如下:
看起来配色不太好看,换成青翠渐变色:
ggplot(df)+
geom_pointdensity(aes(x=x,y=y))+
scale_color_viridis() +
theme_bw()
添加scale_color_viridis函数修改配色:
这个包也是属于ggplot2扩展包,用于绘制密度图,效果和刚才差不多,优点是提供geom_hdr函数,功能比较多。
install.packages("ggdensity")
if (!requireNamespace("remotes")) install.packages("remotes")
remotes::install_github("jamesotto852/ggdensity")
还是使用刚刚创建的假数据来展示:
p <- ggplot(df, aes(x, y)) + coord_equal()
p1 <- p + geom_density_2d_filled()+
theme_bw()
p1
这样获得了一张基础布局的密度图,展示的是等高线,geom_density_2d_filled是ggplot2自带的二维填充绘图函数。
p1<-p + geom_hdr()
如果是使用geom_hdr函数的话,作图效果如下所示:
我问还可以修改边缘线,比如让曲线变成圆形布局或者其他布局,也可以按照小方块进行渲染,类似于GPU显卡计算图像,通过统计每个小方块儿里面点的数量来进行颜色映射。
p2<-p + geom_hdr(method = "mvnorm")
p4<-p + geom_hdr(method = "histogram")
以上就是今天分享的密度图小技巧,感谢您的阅读,如果感觉有所帮助,欢迎点赞转发,下期教程分享R语言中绘制动态交互式热图的方法。
https://blog.csdn.net/weixin_40575651/article/details/107038516
https://rpkgs.datanovia.com/ggpubr/reference/ggdensity.html
https://github.com/jamesotto852/ggdensity
https://cloud.tencent.com/developer/article/2297184
本文由 mdnice 多平台发布