R语言 使用ggplot2在R中创建热图
热图将数据框架的两个属性之间的关系描述为一个彩色编码的瓦片。热图用数据框架的多个属性产生一个网格,表示一次两个属性之间的关系。
让我们首先创建一个相关矩阵来了解不同属性之间的关系,为此我们使用了cor()函数。
语法: cor(dataframe)
注意: 当数据框架由数值以外的值组成时,这个函数会失效,所以我们也将使用sapply()方法。
例子
df <- read.csv("bestsellers.csv")
cor(df[sapply(df, is.numeric)])
输出
现在我们有了一个相关矩阵,我们必须把它融化成一个可以创建热图的形式。为此,我们使用了reshape2库的melt()函数。
R编程中的熔化是为了组织数据。它是通过 melt() 函数进行的,该函数需要数据集和必须保持不变的列值。使用 melt() ,数据框架被转换为长格式,并将数据框架拉长。
语法: melt(data, na.rm = FALSE, value.name = "value")
参数
- data: 代表需要重塑的数据集。
- na.rm: 如果是TRUE,则从数据集中删除NA值。
- value.name: 代表用于存储数值的变量的名称。
例子
library(ggplot2)
library(reshape2)
df <- read.csv("bestsellers.csv")
data <- cor(df[sapply(df,is.numeric)])
data1 <- melt(data)
head(data1)
输出
为了用这样产生的熔化数据创建热图,我们使用了ggplot2库的geom_tile()函数。它基本上是用来创建热图的。
语法: geom_tile(x,y,fill)
参数
- x:X轴上的位置
- y:y轴上的位置
- fill:将被转换为颜色的数字值
在这个函数中,融化的数据框架的Var1和Var2被分别传递给x和y。这些表示属性之间的关系,一次取两个。对填充参数提供,因为这将被用来根据一些数字值对瓷砖进行颜色编码。
例子
library(ggplot2)
library(reshape2)
df <- read.csv("bestsellers.csv")
data <- cor(df[sapply(df,is.numeric)])
data1 <- melt(data)
ggplot(data1, aes(x = Var1,
y = Var2,
fill = value))+geom_tile()
输出:
改变颜色
绘图的颜色可以通过三个函数来改变
- scale_fill_gradient(): 在绘图中添加极端的颜色。
语法:
scale_fill_gradient(high, low)
参数
- low:突出小值的颜色
- high:突出大值的颜色
library(ggplot2)
library(reshape2)
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df,is.numeric)])
data1<-melt(data)
ggplot(data1,aes(x = Var1, y = Var2, fill = value))+
geom_tile()+scale_fill_gradient(high = "green", low = "white")
输出
- scale_fill_distiller(): 它用于根据ColorBrewer调色板进行定制。
语法: scale_fill_distiller(palette)
library(ggplot2)
library(reshape2)
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df, is.numeric)])
data1<-melt(data)
ggplot(data1,aes(x = Var1, y = Var2,fill = value))+
geom_tile() + scale_fill_distiller(palette = "Spectral")
输出
- scale_fill_viridis(): 使用viridis。在这个函数中,discrete被设置为FALSE。
语法: scale_fill_viridis(discrete)
library(ggplot2)
library(reshape2)
library(viridis)
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df,is.numeric)])
data1<-melt(data)
ggplot(data1, aes(x = Var1, y = Var2, fill = value))+
geom_tile() + scale_fill_viridis(discrete = FALSE)
输出
对行进行排序
热图可以通过重新排序其y元素来重新排序。这可以通过reorder()来完成。
语法: reorder(y_value,value)
其中, Value是要重新排序的元素。
library(ggplot2)
library(reshape2)
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df,is.numeric)])
data1<-melt(data)
ggplot(data1,aes(x = Var1, y = reorder(Var2, value),
fill = value)) + geom_tile()
输出
添加标题
标题可以被添加到热图中,使其具有描述性。它可以通过使用ggtitle()来完成。
语法: ggtitle(“标题”)
library(ggplot2)
library(reshape2)
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df,is.numeric)])
data1<-melt(data)
ggplot(data1, aes(x = Var1, y = Var2, fill = value))+
geom_tile()+ggtitle("Bestsellers")
输出
移除标签
热力图的标签也可以被移除,只显示它所代表的相应数值。如果我们删除标签,保留刻度线就没有意义了。我们可以使用theme()函数axis.ticks和axis.text的属性,并将它们设置为 element_blank()。
语法: theme(axis.ticks = element_blank(), axis.text = element_blank())
library(ggplot2)
library(reshape2)
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df,is.numeric)])
data1<-melt(data)
ggplot(data1,aes(x=Var1,y=Var2,fill=value))+geom_tile()+
theme(axis.ticks = element_blank(),
axis.text = element_blank())
输出