在 ggplot2 图表中按因子计数

Posted

技术标签:

【中文标题】在 ggplot2 图表中按因子计数【英文标题】:Count by factor in ggplot2 chart 【发布时间】:2010-12-03 10:38:26 【问题描述】:

给定以下 ggplot2 图表:

ggplot(my_data, aes(colour=my_factor) +   
                geom_point(aes(x=prior, y=current)) +   
                facet_grid(gender ~ age)

我想让点的大小与之前/当前组合的 my_factor 计数成正比。

ggplot(my_data, aes(colour=my_factor, 
                size=<something-here>(my_factor)) +   
                geom_point(aes(x=prior, y=current)) + 
                facet_grid(gender ~ age)

有什么想法吗?

== 编辑 ==

这是一个基于 mpg 数据集的非常简单的示例。让我们将“great_hwy”定义为 hwy > 35,将“great_cty”定义为 cty > 25:

mpg$great_hwy[mpg$hwy > 35]  <-1
mpg$great_hwy[mpg$hwy <= 35] <-0
mpg$great_hwy <- factor(mpg$great_hwy)

mpg$great_cty[mpg$cty > 25]  <- 1
mpg$great_cty[mpg$cty <= 25] <- 0
mpg$great_cty <- factor(mpg$great_cty)

如果我们绘制 great_hwy vs. great_cty,它不会告诉我们太多:

ggplot(mpg) + geom_point(aes(x=great_cty, y=great_hwy))

如何根据 x/y 点的数量使数据点的大小更大?希望这可以解决问题,但请告诉我其他情况。

【问题讨论】:

一个小数据样本在这里会很有帮助...如果需要,您可以从 ?datasets 中选择一个。 我不明白您所说的“先前/当前组合的 my_factor 计数”是什么意思。每个 x/y 是否有多个数据点?因此,您正在寻找过度绘图问题的解决方案?还是你的意思是别的? @Shane,我正在根据您的建议制作一个更好的示例。 @Harlan,每个 x/y 都有很多数据点。我想为每个 x/y 绘制一个数据点,并且我希望所述数据点的大小与 x/y 对的数量成正比。 【参考方案1】:

您当然可以通过在 ggplot 外部进行计数来做到这一点,但是 ggplot 的一大优点是您可以在内部进行许多此类统计!

使用上面的 mpg 示例:

ggplot(mpg) + 
  geom_point(aes(x=great_cty, y=great_hwy, 
                 size=..count..), stat="bin")

【讨论】:

这是一个很好的解决方案。谢谢! 正是我想要的。看起来大多数汽车在城市和高速公路里程方面都不是很好;) 你可能还想看看这个页面,只是为了确保点的大小是你认为的(半径?面积?):had.co.nz/ggplot2/scale_size.html我认为有比例面积是传统上更喜欢比例半径。 是的,但 ggplot2 不这样做,因为它只适用于点 - 而不是(例如)线条或文本。强烈建议使用 scale_area 来获得积分! 我相信这会在新版本的 ggplot 中引发警告(我希望将来不会破坏这种方法):Mapping a variable to y and also using stat="bin". With stat="bin", it will attempt to set the y value to the count of cases in each group. This can result in unexpected behavior and will not be allowed in a future version of ggplot2. If you want y to represent counts of cases, use stat="bin" and don't map a variable to y. If you want y to represent values in the data, use stat="identity". See ?geom_bar for examples. (Deprecated; last used in version 0.9.2)【参考方案2】:

因为接受的答案使用了已弃用的功能,所以我会指出这个适用于 ggplot2 1.0.1 的替代答案

ggplot2 visualizing counts of points plotted on top of each other: stat_bin2d or geom_tile or point size?

【讨论】:

以上是关于在 ggplot2 图表中按因子计数的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2:将颜色固定到因子水平

ggplot2() 按因子绘制一个变量与自身的关系?

R语言ggplot2可视化将X轴置于ggplot2图表顶部实战

R语言可视化包ggplot2包通过因子变量设置图像颜色实战

带有ggplot2的发散堆积条形图:图例中的因子排序问题

ggplot2:从图中删除未使用的因子水平组合的方面(facet_grid)