首页 > 编程知识 正文

r语言ggplot2例,r语言画plot

时间:2023-05-05 18:29:58 阅读:266133 作者:720

数据可视化——R语言ggplot2包绘制相关矩阵为热图 概述:R语言软件和数据可视化——ggplot2快速绘制相关矩阵为热图。本文翻译了一篇英文博客,博客原文链接:http://www.sthda.com/english/wiki/ggplot2-quick-correlation-matrix-heatmap-r-software-and-data-visualization. 内容包括使用ggplot2包快速绘制相关矩阵为热图;由于相关矩阵是对称的,完全显示可能会造成数据冗余,提供了辅助函数将相关矩阵的下三角或上三角元素赋值为NA去除冗余的数据;另外也提供了采用分层聚类的辅助函数将相关矩阵重新排序以发掘相关矩阵中的隐藏信息;最后,还可以将相关矩阵中的系数显示在图形中。 目录 数据准备计算相关矩阵使用ggplot2创建相关矩阵的热图获取相关矩阵的下三角和上三角绘制相关矩阵的上三角元素为热图对相关矩阵重新排序在热图上添加相关系数

本R教程描述了如何使用R软件和ggplot2包可视化相关矩阵。

1. 数据准备

以下示例中mtcars的数据被使用。

mydata <- mtcars[, c(1,3,4,5,6,7)]head(mydata)

输出结果如下:

mpg disp hp drat wt qsecMazda RX4 21.0 160 110 3.90 2.620 16.46Mazda RX4 Wag 21.0 160 110 3.90 2.875 17.02Datsun 710 22.8 108 93 3.85 2.320 18.61Hornet 4 Drive 21.4 258 110 3.08 3.215 19.44Hornet Sportabout 18.7 360 175 3.15 3.440 17.02Valiant 18.1 225 105 2.76 3.460 20.22 2. 计算相关矩阵

可以使用R语言中的cor()函数创建相关矩阵:

cormat <- round(cor(mydata),2)head(cormat)

输出结果如下:

mpg disp hp drat wt qsecmpg 1.00 -0.85 -0.78 0.68 -0.87 0.42disp -0.85 1.00 0.79 -0.71 0.89 -0.43hp -0.78 0.79 1.00 -0.45 0.66 -0.71drat 0.68 -0.71 -0.45 1.00 -0.71 0.09wt -0.87 0.89 0.66 -0.71 1.00 -0.17qsec 0.42 -0.43 -0.71 0.09 -0.17 1.00 3. 使用ggplot2创建相关矩阵的热图

使用reshape2包中的melt()函数将数据“融合”:

library(reshape2)melted_cormat <- melt(cormat)head(melted_cormat)

输出结果:

Var1 Var2 value1 mpg mpg 1.002 disp mpg -0.853 hp mpg -0.784 drat mpg 0.685 wt mpg -0.876 qsec mpg 0.42

ggplot2包中的geom_tile()函数可用于可视化相关矩阵:

library(ggplot2)ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + geom_tile()

输出结果:

默认的绘图很不美观,将在下一节中看到如何更改热图的外观。

请注意,如果您有大量数据,则最好使用geom_raster()函数,运行更快。

4. 获取相关矩阵的下三角和上三角

注意,相关矩阵具有冗余信息。可使用下面的函数将其中的一半设置为NA。

# 获得相关矩阵的下三角元素# Get lower triangle of the correlation matrix get_lower_tri<-function(cormat){ cormat[upper.tri(cormat)] <- NA return(cormat) }# 获得相关矩阵的上三角元素 # Get upper triangle of the correlation matrix get_upper_tri <- function(cormat){ cormat[lower.tri(cormat)]<- NA return(cormat) }

使用方法:

# 获取相关矩阵cormat的上三角元素upper_tri <- get_upper_tri(cormat)upper_tri

输出结果:

mpg disp hp drat wt qsecmpg 1 -0.85 -0.78 0.68 -0.87 0.42disp NA 1.00 0.79 -0.71 0.89 -0.43hp NA NA 1.00 -0.45 0.66 -0.71drat NA NA NA 1.00 -0.71 0.09wt NA NA NA NA 1.00 -0.17qsec NA NA NA NA NA 1.00 5. 绘制相关矩阵的上三角元素为热图

融合相关数据并删除具有NA值的行:

# Melt the correlation matrixlibrary(reshape2)melted_cormat <- melt(upper_tri, na.rm = TRUE)# Heatmaplibrary(ggplot2)ggplot(data = melted_cormat, aes(Var2, Var1, fill = value))+ geom_tile(color = "white")+ scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1,1), space = "Lab", name="PearsonnCorrelation") + theme_minimal()+ theme(axis.text.x = element_text(angle = 45, vjust = 1, size = 12, hjust = 1))+ coord_fixed()

输出结果:

上图中:

负值显示为为蓝色,正值显示为红色。

scale_fill_gradient2与参数limit = c(-1,1)一起使用,限制显示的相关系数范围从-1到1。

coord_fixed()的功能可确保x轴上的一个单位与y轴上的一个单位的长度相同。

6. 对相关矩阵重新排序

本节介绍如何根据相关系数对相关矩阵进行重新排序。这对于识别矩阵中的隐藏模式很有用。下面的示例中使用了分层聚类的hclust()函数对相关矩阵进行重新排序。

对相关矩阵重新排序的辅助函数:

reorder_cormat <- function(cormat){# Use correlation between variables as distancedd <- as.dist((1-cormat)/2)hc <- hclust(dd)cormat <-cormat[hc$order, hc$order]}

重新排序的相关数据可视化:

# Reorder the correlation matrixcormat <- reorder_cormat(cormat)upper_tri <- get_upper_tri(cormat)# Melt the correlation matrixmelted_cormat <- melt(upper_tri, na.rm = TRUE)# Create a ggheatmapggheatmap <- ggplot(melted_cormat, aes(Var2, Var1, fill = value))+ geom_tile(color = "white")+ scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1,1), space = "Lab", name="PearsonnCorrelation") + theme_minimal()+ # minimal theme theme(axis.text.x = element_text(angle = 45, vjust = 1, size = 12, hjust = 1))+ coord_fixed()# Print the heatmapprint(ggheatmap)

输出结果:

7. 在热图上添加相关系数 使用geom_text()函数在图表上添加相关系数。使用theme()函数设置为空白主题(删除轴标签,面板网格和背景以及轴刻度)。使用guides()函数更改图例标题的位置。 ggheatmap + geom_text(aes(Var2, Var1, label = value), color = "black", size = 4) +theme( axis.title.x = element_blank(), axis.title.y = element_blank(), panel.grid.major = element_blank(), panel.border = element_blank(), panel.background = element_blank(), axis.ticks = element_blank(), legend.justification = c(1, 0), legend.position = c(0.6, 0.7), legend.direction = "horizontal")+ guides(fill = guide_colorbar(barwidth = 7, barheight = 1, title.position = "top", title.hjust = 0.5))

输出结果:

References

http://www.sthda.com/english/wiki/ggplot2-quick-correlation-matrix-heatmap-r-software-and-data-visualization

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。