1

我正在尝试使用 R 中的 ggplot2 绘制一些具有 2d 密度轮廓的数据。

我得到了一个有点奇怪的结果。

首先,我设置了我的 ggplot 对象:

p <- ggplot(data, aes(x=Distance,y=Rate, colour = Company))

然后我用 geom_points 和 geom_density2d 绘制它。我希望 geom_density2d 根据组织的规模(OrgSize 变量)进行加权。但是,当我将 OrgSize 添加为加权变量时,图中没有任何变化:

这:

p+geom_point()+geom_density2d()

给出了一个相同的情节:

p+geom_point()+geom_density2d(aes(weight = OrgSize))

但是,如果我使用 geom_smooth 对黄土线做同样的事情,那么权重确实会产生明显的差异。

这:

p+geom_point()+geom_smooth()

对此给出不同的情节:

p+geom_point()+geom_smooth(aes(weight=OrgSize))

我想知道我是否不恰当地使用了 density2d,我是否应该使用轮廓并提供 OrgSize 作为“高度”?如果是这样,那么为什么 geom_density2d 接受加权因子?

下面的代码:

require(ggplot2)

 Company <- c("One","One","One","One","One","Two","Two","Two","Two","Two")
 Store <- c(1,2,3,4,5,6,7,8,9,10)
 Distance <- c(1.5,1.6,1.8,5.8,4.2,4.3,6.5,4.9,7.4,7.2)
 Rate <- c(0.1,0.3,0.2,0.4,0.4,0.5,0.6,0.7,0.8,0.9)
 OrgSize <- c(500,1000,200,300,1500,800,50,1000,75,800)

 data <- data.frame(Company,Store,Distance,Rate,OrgSize)

 p <- ggplot(data, aes(x=Distance,y=Rate))

 # Difference is apparent between these two
 p+geom_point()+geom_smooth()
 p+geom_point()+geom_smooth(aes(weight = OrgSize))

 # Difference is not apparent between these two
 p+geom_point()+geom_density2d()
 p+geom_point()+geom_density2d(aes(weight = OrgSize))
4

1 回答 1

3

geom_density2d正在“接受”权重参数,但随后不传递给MASS::kde2d,因为该函数没有权重。因此,您将需要使用不同的二维密度方法。

(我意识到我的答案没有解决为什么帮助页面说 geom_density2d “理解”权重参数,但是当我尝试计算加权 2D-KDE 时,我需要使用除 MASS 之外的其他包。也许这是一个 TODO @hadley 放入了帮助页面,然后被忽略了?)

于 2012-11-23T17:57:22.350 回答