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)