绘制r中的加权人口密度

时间:2012-07-25 21:35:49

标签: r

我正在分析R中的一批数据,我已经绘制了人口密度。我还想生成一个价值密度图。例如:

      dog.breed    weight.lbs
[1]   Labrador     63
[2]   Maltese      6
[3]   Dalmatian    55
[4]   Poodle       51
[5]   Maltese      4
[6]   Dalmatian    48
[7]   Poodle       56

标准密度图将计算每个品种的出现次数,然后输出一条漂亮的曲线,如下:

      dog.breed    x
[1]   Labrador     1
[2]   Maltese      2
[3]   Dalmatian    2
[4]   Poodle       2

然而,我想要获得的是一个类似的平滑曲线,跟踪每个品种的权重总和,如下:

      dog.breed    x
[1]   Labrador     63
[2]   Maltese      10
[3]   Dalmatian    103
[4]   Poodle       107

我可以通过建立一系列点来做到这一点,例如在最后的例子中,然后拟合曲线。但那太乱了。我希望有人知道干净的包装可以解决繁重的问题。

感谢您的帮助。

一些澄清:

另一个例子怎么样?假设我有50家商店,我知道的每个顾客以及他们每次来商店时花了多少钱。商店中顾客群体的密度图将显示有关每个商店有多少人参加的信息。我正在寻找相同的情节,但是每个商店都花了多少钱。 MEH?

1 个答案:

答案 0 :(得分:3)

如果您使用的是基础R,则需要查看aggregate

data <- read.table(text="dog.breed    weight.lbs
Labrador     63
Maltese      6
Dalmatian    55
Poodle       51
Maltese      4
Dalmatian    48
Poodle       56", header=TRUE, )

aggregate(. ~ dog.breed, data=data, sum)

#  dog.breed weight.lbs
#1 Dalmatian        103
#2  Labrador         63
#3   Maltese         10
#4    Poodle        107

如果您正在寻找一种直接从数据中绘图而无需做任何事情的方法,那么ggplot就是您的朋友:

require(ggplot2)
ggplot(data, aes(x=dog.breed, y=weight.lbs)) +
  geom_bar(stat="identity")

ggplot(data, aes(x=dog.breed)) +
  geom_bar(aes(weight=weight.lbs))

第一个图表绘制了每个x的多个y值,其中geom_bar默认为"stack" arg的position值,因此给出了x的总和。第二个图表有效,因为geom_bar默认为stat_bin生成直方图,但规格为weight。两者都产生相同的输出:

plot