Гистограмма R: некоторые значения не представлены в столбчатой ​​диаграмме с накоплением.

Я часами возился с этой конкретной проблемой, где некоторые случайные значения по какой-то причине не представлены в моей гистограмме с накоплением.

Я проверил наличие нарушений, а также формат, но не смог найти объяснения, почему возникает эта проблема...

Мои данные выглядят следующим образом

    year   A P    B P     A R   B R
1  2005 443.0  268.4 10952.1 289.9
2  2006 216.5   76.6 18403.4 123.9
3  2007 181.4  232.5  1739.9 317.4
4  2008 148.5   50.0   284.9 226.8
5  2009 449.6  136.9   459.2  70.8
6  2010 190.6  383.7   638.2 147.6
7  2011 151.0  307.0  1133.0 177.4
8  2012  22.5  199.5    52.8  71.0
9  2013 956.0  393.8   637.6  47.1
10 2014 892.0  189.5   899.8  50.7
11 2015 340.8  242.4   782.4  40.6
12 2016 187.8 1262.2  3272.0 121.5

Затем я «расплавил» данные и сгруппировал их:

m_ML <- melt(ML, id = "year")
m_ML$groups <- stri_extract_last_words(m_ML$variable)

И создал красивый график (за исключением отсутствующих данных):

MLT <- ggplot(m_ML, aes(x= year, y= value, group= groups, fill= variable)) + 
        geom_bar(stat="identity",position="dodge") + 
        theme_economist() + scale_colour_economist() + 
        coord_cartesian(ylim = c(0, 5000))

Результат был таким: Сюжет

Как видите, график работает, за исключением отсутствия данных по какой-то причине, хотя данные здесь и должны отображаться. (например, значение «AR» отсутствует в 2007, 2010, 2011, 2012 и 2016 годах)

Попытка уменьшить его, чтобы отображались и самые низкие значения, также не работает.

Я был бы очень рад, если бы кто-то мог просветить меня по этой проблеме!


person Daniel    schedule 28.06.2018    source источник


Ответы (1)


Вы рисуете полосы друг над другом. Недостающие полосы находятся позади остальных.

Вот:

ggplot(m_ML, aes(x= factor(year), y= value, group= groups, fill= variable)) + 
  geom_bar(stat="identity",position="dodge", col = 1, alpha = 0.2) + 
  coord_cartesian(ylim = c(0, 5000))

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

Одним из решений является стек:

ggplot(m_ML, aes(x= groups, y= value, group= groups, fill= variable)) + 
  geom_col() +
  facet_grid(~year, switch = 'x') +
  coord_cartesian(ylim = c(0, 5000)) +
  theme(strip.background = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank())

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

Или просто более простая группировка:

ggplot(m_ML, aes(x= factor(year), y= value, fill= variable)) + 
  geom_col(position = 'dodge') +
  coord_cartesian(ylim = c(0, 5000))

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

person Axeman    schedule 28.06.2018
comment
Если бы я сказал, что люблю тебя, это было бы серьезным преуменьшением! Спасибо тысячу раз! Не могли бы вы объяснить мне, почему стек не работает, как я предполагал? (т. е. значения одной группы будут просто накладываться друг на друга) Ура! - person Daniel; 28.06.2018
comment
@ Somedude, если непонятно, это аргумент position = "dodge", из-за которого полосы появляются рядом. - person Ben G; 28.06.2018
comment
Да, установка position на уклонение отключает суммирование. Вы не можете делать и то, и другое одновременно, т.е. вы не можете уклоняться от стаков. - person Axeman; 28.06.2018
comment
Благодарю вас! Я удивляюсь, как я мог пропустить это. Еще раз спасибо за вашу помощь! - person Daniel; 29.06.2018