ggplot2 geom_dotplot()未按count显示全部点的解决咨询
解决geom_dotplot未按count字段显示对应点数的问题
嗨,我来帮你搞定这个问题!你遇到的核心问题是:geom_dotplot默认是根据数据框的行数来生成点的数量,而不是读取你count列里的数值。所以你现在每一行数据只对应1个点,哪怕count是2,也只会显示1个点。
要解决这个问题,我们需要先把数据展开——也就是把每一行数据按照count字段的值重复对应次数,然后再用展开后的数据集绘图。下面是具体的实现方法:
方法一:用dplyr的uncount函数(推荐)
dplyr包的uncount()函数可以非常方便地帮我们完成数据展开的操作:
# 如果还没安装dplyr,先运行这行:install.packages("dplyr") library(dplyr) library(ggplot2) # 你的原始数据集 df <- data.frame(name = c("name1", "name1", "name1", "name1", "name2", "name2", "name2"), id = c(0, 1, 2, 3, 0, 1, 2), count = c(2, 4, 3, 2, 2, 2, 3)) # 根据count列的值重复每一行数据 df_expanded <- df %>% uncount(count) # 用展开后的数据集绘图 ggplot(data = df_expanded, aes(x = name, y = id)) + geom_dotplot(stackdir = "center", binaxis = 'y', dotsize = 0.5, binwidth = 1) + scale_y_continuous(breaks = seq(0, 3, 1), minor_breaks = seq(0, 3, 1))
方法二:用基础R实现
如果你不想加载额外的包,也可以用基础R的rep()函数来完成数据展开:
library(ggplot2) # 你的原始数据集 df <- data.frame(name = c("name1", "name1", "name1", "name1", "name2", "name2", "name2"), id = c(0, 1, 2, 3, 0, 1, 2), count = c(2, 4, 3, 2, 2, 2, 3)) # 展开数据:重复每一行count次 df_expanded <- df[rep(seq_len(nrow(df)), df$count), ] # 绘图 ggplot(data = df_expanded, aes(x = name, y = id)) + geom_dotplot(stackdir = "center", binaxis = 'y', dotsize = 0.5, binwidth = 1) + scale_y_continuous(breaks = seq(0, 3, 1), minor_breaks = seq(0, 3, 1))
这样处理后,name1的id=0会对应2行数据,geom_dotplot就会显示2个点,其他分组的点数也会和count字段的值完全匹配啦!
内容的提问来源于stack exchange,提问作者Menno Van Dijk
相关产品推荐
相关产品推荐

