在 R 中更改 ggplot2 热图中范围的颜色
热图将数据帧的两个属性之间的关系描述为颜色编码的图块。热图生成具有数据帧多个属性的网格,表示一次获取的两个属性之间的关系。
使用中的数据集:畅销书
让我们首先使用默认提供的颜色创建一个常规热图。我们将使用 ggplot2 库的 geom_tile()函数。它主要用于创建热图。
Syntax: geom_tile(x,y,fill)
Parameter:
- x: position on x-axis
- y: position on y-axis
- fill: numeric values that will be translated to colors
对于此函数,融合数据帧的 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()
在此方法中,定义范围的颜色的起始值和结束值作为参数给出。
Syntax: scale_fill_gradient(low, high, guide)
Parameter:
- low: starting value
- high: ending value
- guide: type of legend
例子:
电阻
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()函数将值转换为离散范围。
Syntax: cut(data, breaks)
其中中断采用带有值的向量来划分数据。现在再次绘制热图,但使用离散后创建的新数据。要将颜色添加到范围内的此类热图,请使用 scale_fill_manual() 和每个范围的颜色向量。
Syntax: scale_fill_manual(interval, values=vector of colors)
例子:
电阻
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"))
输出: