#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
. Поскольку вам нужно несколько диаграмм, я бы написал функцию, которая
- создает сетку
n
точек, например, с помощьюexpand.grid
- случайным образом выбирает
p
точки сетки для заполнения - используется
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
. Поскольку вам нужно несколько диаграмм, я бы написал функцию, которая
- создает сетку
n
точек, например, с помощьюexpand.grid
- случайным образом выбирает
p
точки сетки для заполнения- используется
ggplot2
для построения сеткиВ зависимости от количества диаграмм вы можете использовать эту функцию, чтобы создавать свои диаграммы одну за другой. Более элегантным решением было бы использовать, например
purrr::pmap
, цикл по строкам вашего фрейма данных для создания диаграмм:3B`