【问题标题】:Scatter Plot with Varying Point Sizes具有不同点大小的散点图
【发布时间】:2013-03-27 03:20:01
【问题描述】:

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

我要绘制的两列是年龄和收入。年龄采用整数值(40、34、50,...),而收入采用二进制值(=50k)。有 32561 行不同年龄的数据。我想创建一个以年龄为 X 轴和收入二进制变量为我的 Y 轴的绘图,绘图(年龄,收入)。这当然会导致具有两条平行线的图,因为收入是一个很好的二元变量。我试图从情节中获得的信息是属于任一收入类别的给定年龄的人数。我想这样做的方法是让圆圈大小与每个收入阶层中特定年龄的人数成正比。例如,如果 25 岁时有 700 人属于

【问题讨论】:

    标签: r


    【解决方案1】:

    用示例数据更容易回答这些问题,但在这种情况下,很容易想出大致反映问题的东西:

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

    【讨论】:

      【解决方案2】:

      这是一个使用基本 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()
      

      【讨论】:

      • 这正是我想要的!非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多