r - ggplot dotplot 为每个人显示一个点
问题描述
使用 ggplot,我想将 4 个四分位数显示为 400 人(每个四分位数 100 个)作为按性别划分的每个人的单独点
library(tidyverse)
dat_url <- 'https://gender-pay-gap.service.gov.uk/viewing/download-data/2019'
dat <- read_csv(dat_url)
a <- dat %>%
filter(str_detect(EmployerName,'ZELLIS')) %>% # pick a company
select(matches("\\bMale\\w+le", perl=TRUE)) %>% # grab male quartiles
pivot_longer(everything()) %>%
extract(name, c('gender', 'quartile'), '(\\bMale)(\\w+\\b)') %>%
mutate(men=round(value), women = 100 - men) %>%
select(-c(gender, value)) %>%
pivot_longer(c('men','women'), names_to='gender', values_to='value') %>%
mutate(quartile = str_replace(quartile,'(^\\w+?)(Middle)', '\\2\\1'))
样本数据:
a
# A tibble: 8 x 3
quartile gender value
<chr> <chr> <dbl>
1 LowerQuartile men 39
2 LowerQuartile women 61
3 LowerMiddleQuartile men 39
4 LowerMiddleQuartile women 61
5 UpperMiddleQuartile men 57
6 UpperMiddleQuartile women 43
7 TopQuartile men 64
8 TopQuartile women 36
解决方案
这是一种可能性。您可以“计数”数据,以便每个点有一行,然后用正方形绘制点。这可能是这样的
a %>% uncount(value) %>%
group_by(quartile) %>%
mutate(row = (row_number() -1)%/% 10 + 1,
col = (row_number() -1) %% 10 + 1) %>%
ggplot() +
aes(col, row, color=gender) +
geom_point(shape=15) +
facet_grid(~quartile) +
coord_equal() +
theme(axis.ticks.x=element_blank(), axis.ticks.y=element_blank(),
axis.text.x=element_blank(), axis.text.y=element_blank(),
axis.title.x=element_blank(), axis.title.y=element_blank())
推荐阅读
- javascript - Discord.js 对于每个用户
- amazon-web-services - 如何限制 AWS Cognito 用户采取某些行动?
- python - 如何在 Flask-SQLAlchemy 中启用连接池?
- c - 我们正在尝试存储通过我们的 readPoly 函数输入的多个数组
- python - 如何在 Pandas 中检查时间范围?
- blazor - Blazor 可以在没有任何 UI 引用或代码的情况下创建 wasm 模块吗?
- confluence - Confluence:如何通过脚本从文本文件(markdown)创建多个页面树?
- docker - 来自 sysinternals 的 Sigcheck 未在 Windows 容器 Docker 中运行
- java - 我应该如何使用 getResource()?
- android - resources.getIdentifier() 总是为发布 apk 返回 0