r - ggplot dotplot 为每个人显示一个点

标签 r ggplot2

对于 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

看起来像这样: enter image description here

最佳答案

这是一种可能性。您可以“取消计数”数据,以便每个点一行,然后用正方形绘制这些点。这是可能的样子

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

enter image description here

关于r - ggplot dotplot 为每个人显示一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64021131/

相关文章:

r-data.table和testthat包

R 绘制边距和虚线 y 轴

r - 在ggplot中对齐绘图区域

r - 表示注视次数的热图

r - 在 ggplot2 中注释箱线图

r - 在ggplot2中如何向圆环图添加角度标签

r - 如何在多 channel 路径中获取交互类型

r - 使用 R 中的传单库绘制跨越国际日期变更线的路线

R 密码保护 .rdata 数据文件

r - 具有多个重叠误差线的条形图