2013-03-27 57 views
3

我是一个新的R用户,所以请原谅我,如果我的问题看起来很简单。尽管我研究了食谱和统计分析手册,但我一直无法根据自己的喜好构建特定的图表。分散点与变化点的大小

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

回答

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

5

这里还有一个版本使用基础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

+0

这正是我一直在寻找!非常感谢你。 – user2214069 2013-04-03 17:22:41