Geom_bar с R (новичок) - PullRequest
       8

Geom_bar с R (новичок)

0 голосов
/ 05 мая 2020

Всем доброе утро,

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

> test = data.frame (type_transport = sample (c ("ON FOOT", "CAR", "TRANSPORT COMMON"), 5000, replace = T), type_route = sample (c ("N", "D", " A "," VC "), 5000, replace = T), department = sample (c (" department1"," department2"), 5000, replace = T), troncon = sample (x = 0: 17 , 5000, replace = T))

Введя эту формулу, я получаю гистограмму:

> ggplot (test, aes (x = route_type, y = troncon_km, fill = department)) + geom_bar (stat = "identity")

https://zupimages.net/viewer.php?id=20 / 19 / vt1s.png

Теперь я хотел бы разделить эти полосы пополам, чтобы отображать данные по двум моим отделам. Для этого я использую position = "dodge":

> ggplot (test, aes (x = road_type, y = troncon_km, fill = department)) + geom_bar (stat = "identity", position = "dodge")

Но есть проблема. Шкала Y слишком мала по сравнению с реальностью (мы go от нескольких тысяч на первом графике до 15 на втором). Я явно что-то упустил ...

https://zupimages.net/viewer.php?id=20 / 19 / sbh5.png

Не понимаю.

Спасибо.

1 Ответ

0 голосов
/ 06 мая 2020

Причина, по которой все столбцы имеют одинаковую высоту, заключается в том, что geom_bar(stat="identity") будет строить столбец для каждого наблюдения (и высота столбца будет равна значению для этого наблюдения). Поскольку каждая категория в обоих отделах имеет как минимум одно наблюдение из 17, все столбцы показывают это значение.

Есть несколько способов продвинуться вперед:

ggplot(test, aes(type_route, troncon_km, fill = department)) +
  stat_summary(geom = "bar", position = "dodge", fun.y = sum)

Аргумент fun.y может быть любой другой функцией (например, mean или median et c.)

2.

library("tidyverse")
total_km <- test %>%
    group_by(department, type_route) %>%
    summarise(total_km = sum(troncon_km)) 

ggplot(total_km, aes(type_route, total_km, fill = department)) +
    geom_bar(stat = "identity", position = "dodge")

Снова вы можете изменить функцию sum() в пределах summarise() по своему вкусу.

с использованием того же кадра данных total_km, только немного короче, используя geom_col

ggplot(total_km, aes(type_route, total_km, fill = department)) +
  geom_col(position = "dodge")

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...