#r #grouping #bar-chart #stacked
#r #группировка #столбчатая диаграмма #сложенный
Вопрос:
Я просмотрел все вопросы столбчатой диаграммы на сайтах, но все еще не мог понять, что делать с моим набором данных. Я не знаю, является ли это дубликатом, но любая помощь была бы очень признательна
Мой набор данных
Region Scenario HC NPV1 NPV2
C 1 0.1 10 5
C 2 0.2 8 4
C 3 0.3 7 3
C 4 0.4 6 2
N 1 0.1 10 5
N 2 0.2 8 4
N 3 0.3 7 3
N 4 0.4 6 2
W 1 0.1 10 5
W 2 0.2 8 4
W 3 0.3 7 3
W 4 0.4 6 2
Я хочу создать столбчатую диаграмму, где HC, сценарий находится по оси x, NPV1 и NPV2 — это высота, и их можно различать по разным шаблонам. Область должна быть общим именем в середине каждого из 4 сценариев.
Большое спасибо.
Ожидаемый результат примерно такой.
Комментарии:
1. Вы ищете только решения на базе R или вас также интересуют
ggplot
подходы?2. При дальнейшем размышлении мне на самом деле неясно, как вы хотели бы визуализировать свои данные. Можете ли вы предоставить макет вашего ожидаемого выходного графика?
Ответ №1:
В дополнение к моим приведенным выше комментариям, мне совершенно неясно, как вы хотели бы визуализировать свои данные. Что именно вы хотели бы показать на оси x?
Для начала, возможно, вам нужно что-то подобное?
library(tidyverse)
df %>%
gather(key, val, -Region, -Scenario, -HC) %>%
unite(x, Region, Scenario, HC) %>%
ggplot(aes(x, val, fill = key))
geom_col()
Здесь категории по оси x имеют вид <Region>_<Scenario>_<HC>
.
Обновить
Чтобы получить график, аналогичный показанному вами, вы можете сделать следующее
library(tidyverse)
df %>%
gather(key, val, -Region, -Scenario, -HC) %>%
ggplot(aes(HC, val, fill = key))
geom_col(position = "dodge2")
facet_wrap(~Region, nrow = 1, strip.position = "bottom")
theme_minimal()
theme(strip.placement = "outside")
Объяснение: strip.position = "bottom"
гарантирует, что метки полос находятся внизу, и strip.placement = "outside"
гарантирует, что метки полос находятся под метками оси (если быть точным, между метками оси и заголовком оси).
Примерные данные
df <- read.table(text =
"Region Scenario HC NPV1 NPV2
C 1 0.1 10 5
C 2 0.2 8 4
C 3 0.3 7 3
C 4 0.4 6 2
N 1 0.1 10 5
N 2 0.2 8 4
N 3 0.3 7 3
N 4 0.4 6 2
W 1 0.1 10 5
W 2 0.2 8 4
W 3 0.3 7 3
W 4 0.4 6 2
", header = T)
Комментарии:
1. Привет, Маурит, я ищу вариант с базой R, если это возможно. Я пытаюсь избежать использования ggplot из-за нескольких проблем.
2. По оси x я хотел бы визуализировать что-то вроде: В первой строке с отметкой — значение HC Ниже значения HC — сценарий 1, 2, 3 соответственно, а последняя строка — название региона, которое является одним на 4 сценария, в середине 4 сценария. Имеет ли это смысл?
3. @Lara Можете ли вы отредактировать свой пост, чтобы показать макет рисунка? Я думаю, что это может быть довольно сложно сделать, особенно несколько строк меток x будет трудно реализовать в базе R (и
ggplot
в этом отношении).4. Привет, Мауриц, иначе я бы удалил строку сценария. Требуется только значение HC по оси x, и область, возможно, может быть использована mtext?
5. Я предполагаю, что это также может быть 3 графика, каждый график представляет один регион и название региона на каждом графике, но все три графика должны быть на одном графике.