R ggplot中的平滑热图

R ggplot中的平滑热图,r,ggplot2,R,Ggplot2,我有一个如下所示的数据框: X = c(6,6.2,6.4,6.6,6.8,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5) Y = c(2.2,2.2,2.2,2.2,2.2,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2

我有一个如下所示的数据框:

X = c(6,6.2,6.4,6.6,6.8,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5)
Y = c(2.2,2.2,2.2,2.2,2.2,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8)
Value = c(0,0.00683254,0,0.007595654,0.015517884,0,0,0,0,0,0,0,0,0,0.005219395,0,0,0,0,0,0,0,0,0,0,0,0.002892342,0,0.002758141,0)
table = data.frame(X, Y, Value)
根据以下命令,我在R中绘制了一张热图:

  ggplot(data = table, mapping = aes(x = X, y = Y)) + 
    geom_tile(aes(fill = Value), colour = 'black') + 
    theme_void() + 
    scale_fill_gradient2(low = "white", high = "black") + xlab(label = "X") + ylab(label = "Y") 
由于没有每个X和Y的值,因此会导致出现如下图

我试图使情节平滑,并提出以下问题:

由于在绘制的值之间存在小的空白,如何将这些空白的颜色设置为中等强度?换言之,在顶部绘制非零“值”(叠加)之前,如何首先创建具有非零中值“值”的初始层

下面显示了一个已“平滑”的示例,它看起来更接近所需的输出。

我不确定它是否完全符合您的需要,但据我所知,您缺少一些值以及X和Y的组合

因此,您可以使用
tidyr
中的
complete
函数来获得X和Y的所有不同组合(没有值的组合将用
NA
填充),然后使用
scale\u fill\u gradient2
函数中的
NA.value
参数,您可以将这些
NA
值的值设置为中点值的相同颜色:

library(tidyr)
图书馆(dplyr)
图书馆(GG2)
表%>%完成(X,Y)%%>%
ggplot(aes(x=x,y=y))+
geom_光栅(aes(填充=值),插值=真)+
比例填充梯度2(低=“白”,中=“灰”,高=“黑”,
na.value=“灰色”)

它是否回答了您的问题?

我不确定它是否完全符合您的需要,但据我所知,您缺少一些值以及X和Y的组合

因此,您可以使用
tidyr
中的
complete
函数来获得X和Y的所有不同组合(没有值的组合将用
NA
填充),然后使用
scale\u fill\u gradient2
函数中的
NA.value
参数,您可以将这些
NA
值的值设置为中点值的相同颜色:

library(tidyr)
图书馆(dplyr)
图书馆(GG2)
表%>%完成(X,Y)%%>%
ggplot(aes(x=x,y=y))+
geom_光栅(aes(填充=值),插值=真)+
比例填充梯度2(低=“白”,中=“灰”,高=“黑”,
na.value=“灰色”)

它回答了您的问题吗?

您能提供一个可复制的数据集示例吗?(见:)现在,如果不进行测试就很难回答所有问题。你能澄清你的问题2吗?你能展示一张预期输出的图纸吗?好点dc37。我试图澄清这篇文章来回答你的问题。@user2657817一张你预期输出的(模型)图纸会很有帮助。我不知道你在找什么。你提到术语“平滑”和“插值”;我不清楚您要平滑/插值什么。如何平滑?根据什么插入什么?澄清问题并添加模型另一种可能的方法是使用geom_rect()并设置所有四个角,以填充整个热图。但正如其他人所说的,它并不完全清楚您希望它看起来像什么。您能提供一个可复制的数据集示例吗?(见:)现在,如果不进行测试就很难回答所有问题。你能澄清你的问题2吗?你能展示一张预期输出的图纸吗?好点dc37。我试图澄清这篇文章来回答你的问题。@user2657817一张你预期输出的(模型)图纸会很有帮助。我不知道你在找什么。你提到术语“平滑”和“插值”;我不清楚您要平滑/插值什么。如何平滑?根据什么插入什么?澄清问题并添加模型另一种可能的方法是使用geom_rect()并设置所有四个角,以填充整个热图。但正如其他人所说,它并不完全清楚你想要它看起来像什么。