#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
столбца, отсюда и ошибка.