2013-03-27 65 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