/ / Створення смуги в ggplot2 із зображенням певного значення в декількох стовпцях набору даних - r, ggplot2

Створення смуги смуги в ggplot2, що зображує кількість конкретного значення в декількох стовпцях набору даних - r, ggplot2

У мене такий набір даних:

Area             Chemical   Machinery   Other
Abilene TX       Yes        No          Yes
Akron OH         Yes        No          No
Albany GA        Yes        Yes         No
Albuquerque NM   No         Yes         Yes
Alexandria LA    Yes        No          Yes

Мені потрібно використовувати ggplot2 зробити а бар сюжет показуючи кількість "yeses" у кожному стовпці. Таким чином, остаточний смуг буде мати три стовпці по осі Х, значення осі Y - 4 для «Хімічна», 2 для «Машини» та 3 для «Інше».

Ще не новим у ggplot2, а також не впевнений, як чітко знайти підрахунки певного значення (у цьому випадку кількість "yeses") у кожному стовпчику та його графіку. Дякую!

Відповіді:

1 для відповіді № 1

Це легше, якщо ви конвертуєте свої дані у широкому форматі (кілька стовпців) у довгий формат (менше стовпців, більше рядків)

library(tidyr)
library(dplyr)
yes <- df %>%
select(-Area) %>%
gather() %>%
group_by(key) %>%
summarise(value = sum(value=="Yes"))

# A tibble: 3 x 2
# key value
# <chr> <int>
# 1  Chemical     4
# 2 Machinery     2
# 3     Other     3

library(ggplot2)
ggplot(yes, aes(x=key, y=value)) +
geom_bar(stat="identity")

Як вказує @steveb, можна трохи покращити, використовуючи stat_count

df %>%
select(-Area) %>%
gather() %>%
filter(value == "Yes") %>%
ggplot(aes(key, ..count..)) + geom_bar()

0 для відповіді № 2

Base-R короткий шлях, щоб дістатися до вашого графіка, використовуючи colSums:

n_yes <- data.frame(type = names(df[, -1]),
total_yes = colSums(df[, -1] == "Yes"))

ggplot(n_yes, aes(x = type, y = total_yes)) +
geom_bar(stat = "identity")

введіть опис зображення тут