具有不同点大小的散点图

时间:2013-03-27 03:20:02

标签: r

我是新用户,如果我的问题看起来很简单,请原谅我。尽管我研究了Cookbook和统计分析手册,但我无法根据自己的喜好构建特定的图表。

我想要绘制的两个栏目是年龄和收入。 Age采用整数值(40,34,50,...),而收入采用二进制值(< = 50k,> = 50k)。有32561行不同年龄的数据。我想创建一个年龄为X轴和收入二元变量的图作为我的Y轴,图(年龄,收入)。这当然会导致两条平行线的图,因为收入是一个二元变量,很好。我试图从情节中获得的信息是属于任何一个收入桶的特定年龄的人数。我想这样做的方法是让圈子大小与每个收入等级中某个年龄段的人数成比例。例如,如果25岁时有700人处于< = 50k支架而150则落入另一支架,则两点的大小将根据人数而变化。因此,落入< = 50k桶中的700人将由一个大圆圈代表,而后者则是一个小得多的圆圈。我想为所有年龄段做这个......我希望这是有道理的。如果需要澄清,请告诉我。谢谢!我相信在不久的将来你会再次收到我的回复。

2 个答案:

答案 0 :(得分:7)

使用示例数据回答这些问题更容易,但在这种情况下,很容易想出一些粗略反映问题的内容:

age = rep(c(20, 30, 40, 50, 60), 20)
income = c(rep(">50k", 80), rep("<50k", 20))

df1 = data.frame(age=age, income=income)

首先,我们生成数据摘要,在每个年龄和收入组合中获得count个人:

library(plyr)
df1_summary = ddply(
  df1,
  .(age, income),
  summarize,
  count=length(income)
  )

然后使用ggplot2

进行绘图很容易
ggplot(df1_summary, aes(age, income, size=count)) +
  geom_point()

size mapped to counts

答案 1 :(得分:6)

这是一个使用基础R图形的版本,它采用了@Marius的示例数据:

test <- with(df1,table(age,income))
test <- as.matrix(as.data.frame.matrix(test))
plot(
  row(test),
  col(test),
  cex=test/3,pch=20,
  xlim=c(0.5,nrow(test)+0.5),
  ylim=c(0.5,ncol(test)+0.5),
  axes=FALSE,
  ann=FALSE
)
axis(1,at=1:nrow(test),labels=rownames(test),cex.axis=0.8)
axis(2,at=1:ncol(test),labels=colnames(test),cex.axis=0.8)
title(xlab="Age Group",ylab="Income")
box()

enter image description here