построение графиков с использованием ggplot с функцией «заполнить=» для гистограмм

#r #ggplot2

Вопрос:

Я изобразил эти исходные данные с помощью кода ниже и теперь хочу использовать «ggplot(, отображение = aes(, заполнение=____)) geom_bar()»

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

редактировать когда я смотрю на данные Surveys_by_species, они показывают как n, так и половые столбцы, которые должны быть в состоянии отображать график

Используемые данные

 ggplot(data = surveys_by_species, mapping = aes(x=fct_reorder (species_id,n,.desc=TRUE), y = n, fill=sex))   geom_bar()  Error: stat_count() can only have an x or y aesthetic.  
 ggplot(data = surveys_by_species,  mapping = aes(x=fct_reorder (species_id,n,.desc=TRUE), y = n))     geom_col()    theme(axis.text = element_text(angle = 45, hjust = 1))     

Первый график с использованием данных

Это мои данные выглядят как surveys_by_species

 gt; surveys_by_species # A tibble: 93 × 3 # Groups: species_id, sex [93]  species_id sex n  lt;chrgt; lt;chrgt; lt;intgt;  1 "" "" 763  2 "AB" "" 303  3 "AH" "" 436  4 "AH" "M" 1  5 "AS" "" 2  6 "BA" "" 1  7 "BA" "F" 31  8 "BA" "M" 14  9 "CB" "" 50 10 "CM" "" 13 # … with 83 more rows  
 gt; dput(surveys_by_species[1:10, ]) structure(list(species_id = c("", "AB", "AH", "AH", "AS", "BA",  "BA", "BA", "CB", "CM"), sex = c("", "", "", "M", "", "", "F",  "M", "", ""), n = c(763L, 303L, 436L, 1L, 2L, 1L, 31L, 14L, 50L,  13L)), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA,  -10L), groups = structure(list(species_id = c("", "AB", "AH",  "AH", "AS", "BA", "BA", "BA", "CB", "CM"), sex = c("", "", "",  "M", "", "", "F", "M", "", ""), .rows = structure(list(1L, 2L,   3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), ptype = integer(0), class = c("vctrs_list_of",  "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame" ), row.names = c(NA, -10L), .drop = TRUE))  

Комментарии:

1. Пожалуйста, поделитесь своими данными в виде текста для копирования/вставки, а не в виде изображения. ‘dput(surveys_by_species[1:10,]) — отличный способ поделиться первыми 10 строками ваших данных, чтобы их можно было скопировать/вставить.

2. Основное различие между geom_col и geom_bar заключается в том, что geom_col предполагается, что ваши данные уже агрегированы, и у вас есть столбец, который вы сопоставляете с осью y. Вы указываете y = n в своем сопоставлении, что кажется подходящим, но на изображении ваших данных не отображается n столбец, так что это сбивает с толку. geom_bar с другой стороны , предполагается, что ваши данные не агрегированы и будут считать каждую строку как наблюдение, помещая общее количество строк по оси y.

3. Если у вас есть код, который работает для незаполненного участка, я бы ожидал, что добавление fill = sex будет работать просто отлично, без переключения с geom_col на geom_bar (или наоборот).

4. Спасибо за добавление данных. Данные, которыми вы поделились, отличаются от данных на вашем изображении — в нем всего 2 столбца, species_id и n . В нем нет sex столбца, отсюда и ошибка.