4

我是新的 R 用户,所以如果我的问题看起来很简单,请原谅我。尽管我研究了 Cookbook 和 The Handbook of Statistical Analysis,但我一直无法根据自己的喜好构建特定的图表。

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

4

2 回答 2

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()

大小映射到计数

于 2013-03-27T03:29:57.777 回答
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()

在此处输入图像描述

于 2013-03-27T05:23:12.773 回答