создание сеточной диаграммы в R

#r

#r

Вопрос:

Приношу извинения, если этот вопрос слишком упрощен, мне кажется, что я все время вижу диаграммы такого типа, но до сих пор мне никогда не приходилось составлять их самому.

Я учу некоторых нематематических людей тому, как работает определение размеров выборки, и мои примерные данные выглядят так:

 testid lt;- c(1, 1, 2, 2, 3, 3) source lt;- rep(c("A", "B"), 3) n lt;- c(1, 1, 100, 100, 100, 100) p lt;- c(1, 0, 1, 2, 50, 51)  df lt;- data.frame(testid, source, n, p) df  testid source n p 1 1 A 1 1 2 1 B 1 0 3 2 A 100 1 4 2 B 100 2 5 3 A 100 50 6 3 B 100 51  

Что я хотел бы сделать, так это представить это с помощью изображений, на которых есть n точки в сетке, из которых p заполнены точки. Так что мой результат будет выглядеть так:

 {1A: image of one filled-in dot} {1B: image of one empty dot} {2A: image of 100 empty dots in a 10x10 grid, of which one is filled in} {2B: image of 100 empty dots in a 10x10 grid, of which two are filled in} {3A: image of 100 empty dots in a 10x10 grid, of which 50 are filled in} {3B: image of 100 empty dots in a 10x10 grid, of which 51 are filled in}  

Возможно ли это в R (любом пакете)? Если нет, то какой инструмент лучше всего подходит для этого?

Ответ №1:

Конечно, этого можно было бы достичь в R . Поскольку вам нужно несколько диаграмм, я бы написал функцию, которая

  1. создает сетку n точек, например, с помощью expand.grid
  2. случайным образом выбирает p точки сетки для заполнения
  3. используется ggplot2 для построения сетки

В зависимости от количества диаграмм вы можете использовать эту функцию, чтобы создавать свои диаграммы одну за другой. Более элегантным решением было бы использовать, например purrr::pmap , цикл по строкам вашего фрейма данных для создания диаграмм:

 library(ggplot2) library(purrr)  set.seed(123)  plot_grid lt;- function(n, p, ...) {  # Make grid  n lt;- round(sqrt(n))  d lt;- expand.grid(x = seq(n), y = seq(n))  d$fill lt;- 0  # Randomly choose p grid points to fill  d$fill[sample(seq(nrow(d)), p)] lt;- 1   # Plot  ggplot(d, aes(x, y, fill = factor(fill)))    geom_point(shape = 21, size = 10)    scale_fill_manual(values = c("0" = "white", "1" = "red"))    theme_void()    guides(fill = "none") }  grid_plots lt;- purrr::pmap(df, plot_grid) names(grid_plots) lt;- paste0(df$testid, df$source)  grid_plots
 #r

 #r

Вопрос:

Приношу извинения, если этот вопрос слишком упрощен, мне кажется, что я все время вижу диаграммы такого типа, но до сих пор мне никогда не приходилось составлять их самому. Я учу некоторых нематематических людей тому, как работает определение размеров выборки, и мои примерные данные выглядят так:
 testid lt;- c(1, 1, 2, 2, 3, 3) source lt;- rep(c("A", "B"), 3) n lt;- c(1, 1, 100, 100, 100, 100) p lt;- c(1, 0, 1, 2, 50, 51)  df lt;- data.frame(testid, source, n, p) df  testid source n p 1 1 A 1 1 2 1 B 1 0 3 2 A 100 1 4 2 B 100 2 5 3 A 100 50 6 3 B 100 51  

Что я хотел бы сделать, так это представить это с помощью изображений, на которых есть n точки в сетке, из которых p заполнены точки. Так что мой результат будет выглядеть так:

 {1A: image of one filled-in dot} {1B: image of one empty dot} {2A: image of 100 empty dots in a 10x10 grid, of which one is filled in} {2B: image of 100 empty dots in a 10x10 grid, of which two are filled in} {3A: image of 100 empty dots in a 10x10 grid, of which 50 are filled in} {3B: image of 100 empty dots in a 10x10 grid, of which 51 are filled in}  

Возможно ли это в R (любом пакете)? Если нет, то какой инструмент лучше всего подходит для этого?

Ответ №1:

Конечно, этого можно было бы достичь в R . Поскольку вам нужно несколько диаграмм, я бы написал функцию, которая

  1. создает сетку n точек, например, с помощью expand.grid
  2. случайным образом выбирает p точки сетки для заполнения
  3. используется ggplot2 для построения сетки

В зависимости от количества диаграмм вы можете использовать эту функцию, чтобы создавать свои диаграммы одну за другой. Более элегантным решением было бы использовать, например purrr::pmap , цикл по строкам вашего фрейма данных для создания диаграмм:

3B`