R 三变量绘制热图ggplot2

R 三变量绘制热图ggplot2,r,plot,ggplot2,heatmap,density-plot,R,Plot,Ggplot2,Heatmap,Density Plot,我目前正在制作一个非常简单的data.frame,包含三列: x包含一组点的x坐标 y包含点集的y坐标,以及 权重包含与每个点相关的值 现在,在ggplot2中工作,我似乎能够为这些数据绘制等高线,但我无法找到根据变量weight填充曲线的方法。以下是我使用的代码: ggplot(df, aes(x,y, fill=weight)) + geom_density_2d() + coord_fixed(ratio = 1) 可悲的是,你可以看到没有任何填充物。 我已经试了三天了,我开

我目前正在制作一个非常简单的
data.frame
,包含三列:

x
包含一组点的x坐标

y
包含点集的y坐标,以及

权重
包含与每个点相关的值

现在,在
ggplot2
中工作,我似乎能够为这些数据绘制等高线,但我无法找到根据变量
weight
填充曲线的方法。以下是我使用的代码:

ggplot(df, aes(x,y, fill=weight)) + 
  geom_density_2d() +
  coord_fixed(ratio = 1) 
可悲的是,你可以看到没有任何填充物。 我已经试了三天了,我开始感到沮丧

在常规
ggplot
调用中指定
fill=weight
和/或
color=weight
,结果无效。我尝试过使用不同的几何图形(瓷砖、光栅、多边形…),但仍然没有。试图将
aes
直接指定到geom层中,但也不起作用。 尝试将对象转换为ppp,但
ggplot
无法处理它们,并且使用base-R绘图也无法工作。我真的不知道怎么了! 我正在附加前10个点的数据,这些数据间隔在不规则的网格上:

x = c(-0.13397460,-0.31698730,-0.13397460,0.13397460,-0.28867513,-0.13397460,-0.31698730,-0.13397460,-0.28867513,-0.26794919)

y = c(-0.5000000,-0.6830127,-0.5000000,-0.2320508,-0.6547005,-0.5000000,-0.6830127,-0.5000000,-0.6547005,0.0000000)

weight = c(4.799250e-01,5.500250e-01,4.799250e-01,-2.130287e+12,5.798250e-01,4.799250e-01,5.500250e-01,4.799250e-01,5.798250e-01,6.618956e-01)
有什么建议吗?所需的输出将是以下内容:


提前谢谢。

根据您的描述
geom\u density
听起来不太对

你可以试试:


下面是使用
fill=..level..
的第二个最佳方法

#加载库
图书馆(GG2)
图书馆(RColorBrewer)
图书馆(主题)
#构建您的data.frame

df听起来好像你误用了密度图。密度图用于估计潜在的概率密度函数(在样本空间上积分为1的函数)。也许听起来你想要某种形式的插值来将函数值分散到曲面上?但是在这种情况下,您需要为插值选择某种形式的统计建模。您是否尝试过查看
filled.contour
函数?您首先需要使用类似于
library(akima)
int.ds的东西来插值数据。这不使用权重。您好@Axeman,您好。我的答案没有使用
fill=weights
,这就是为什么我说它是“第二好的”。据我所知,在
stat\u density\u 2d
中无法将数据向量传递到
fill
。在我贴出的答案中有一些解释。
ggplot(df, aes(x,y, fill = weight)) + 
     geom_raster() +
     coord_fixed(ratio = 1)  + 
     scale_fill_gradientn(colours = rev(rainbow(7)) # colourmap
# load libraries
  library(ggplot2)
  library(RColorBrewer)
  library(ggthemes)

# build your data.frame
 df <- data.frame(x=x, y=y, weight=weight)

# build color Palette
  myPalette <- colorRampPalette(rev(brewer.pal(11, "Spectral")), space="Lab")


# Plot
  ggplot(df, aes(x,y, fill=..level..) ) + 
      stat_density_2d( bins=11, geom = "polygon") +
      scale_fill_gradientn(colours = myPalette(11)) +
      theme_minimal() +
      coord_fixed(ratio = 1)