📜  在 R 中更改 ggplot2 热图中范围的颜色

📅  最后修改于: 2022-05-13 01:55:03.483000             🧑  作者: Mango

在 R 中更改 ggplot2 热图中范围的颜色

热图将数据帧的两个属性之间的关系描述为颜色编码的图块。热图生成具有数据帧多个属性的网格,表示一次获取的两个属性之间的关系。

使用中的数据集:畅销书

让我们首先使用默认提供的颜色创建一个常规热图。我们将使用 ggplot2 库的 geom_tile()函数。它主要用于创建热图。

对于此函数,融合数据帧的 Var1 和 Var2 分别传递给 x 和 y。这些表示一次取两个属性之间的关系。提供填充参数,因为它将用于根据某个数值对图块进行颜色编码。

例子:

R
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()


R
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(low = "#86ebc9",
                    high = "#09855c",
                    guide = "colorbar")


R
library(ggplot2)
library(reshape2)
  
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df,is.numeric)])
data1<-melt(data)
  
data2<-data1
data2$group<-cut(data2$value,
                 breaks = c(-1,-0.5,0,0.5, 1))
  
  
ggplot(data2,aes(x=Var1,
                 y=Var2,
                 fill=group))+geom_tile()+
  scale_fill_manual(breaks = levels(data2$group),
                    values = c("#86ebc9", "#869ceb",
                               "#b986eb","#a1eb86"))


输出:

方法一:使用 scale_fill_gradient()

在此方法中,定义范围的颜色的起始值和结束值作为参数给出。

例子:

电阻

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(low = "#86ebc9",
                    high = "#09855c",
                    guide = "colorbar")

输出:

方法二:使用 scale_fill_manual()

到目前为止,我们一直在为连续值添加颜色,在这种方法中,首先使用 cut()函数将值转换为离散范围。

其中中断采用带有值的向量来划分数据。现在再次绘制热图,但使用离散后创建的新数据。要将颜色添加到范围内的此类热图,请使用 scale_fill_manual() 和每个范围的颜色向量。

例子:

电阻

library(ggplot2)
library(reshape2)
  
df<-read.csv("bestsellers.csv")
data<-cor(df[sapply(df,is.numeric)])
data1<-melt(data)
  
data2<-data1
data2$group<-cut(data2$value,
                 breaks = c(-1,-0.5,0,0.5, 1))
  
  
ggplot(data2,aes(x=Var1,
                 y=Var2,
                 fill=group))+geom_tile()+
  scale_fill_manual(breaks = levels(data2$group),
                    values = c("#86ebc9", "#869ceb",
                               "#b986eb","#a1eb86"))

输出: