R - geom_bar Сгруппированный столбец с сгруппированными ярлыками - PullRequest
0 голосов
/ 17 мая 2018

Я комбинирую гистограмму с накоплением и линейный график.

Вот воспроизводимый код для кадров данных:

df1 <- data.frame(month = c("Okt 2017", "Okt 2017", "Okt 2017", "Nov 2017", "Nov 2017", "Nov 2017", "Dez 2017", 
                            "Dez 2017", "Dez 2017", "Jan 2018", "Jan 2018", "Jan 2018", "Feb 2018", "Feb 2018", "Feb 2018",
                             "Mrz 2018", "Mrz 2018", "Mrz 2018"), 
                 source = c("a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c", "a", "b", "c"),
                 value1 = c(sample (c(1000L:4000L),18, replace = FALSE))
                 )

df1$month <- as.yearmon(df1$month)
df1 <- arrange(df1, month)

Второй df:

df2 <- data.frame(month = c("Okt 2017", "Nov 2017", "Dez 2017", "Jan 2018", "Feb 2018", "Mrz 2018"), 
                  value2 = c(sample (c(5000000L:6000000L),6, replace = FALSE))
                  )

df2$month <- as.yearmon(df2$month)
df2 <- arrange(df2, month)

и код для построения:

ggplot() +   
geom_bar(data = df1, aes(month, value1*5000000/5000, fill = source), stat="identity", position = "stack") +
geom_point(data = df2, aes(month, value2), color = "blue")+   
geom_line(data = df2, aes(month, value2), group = 1, color = "blue") +  
labs(x = "month", y="value2 (line)") +   scale_y_continuous(sec.axis = sec_axis(~.*5000/5000000, name = "value1 (bars)"), 
                     labels= format_format(big.mark = ".", decimal.mark = ",", scientific = FALSE)) +   
scale_x_yearmon(format = "%Y-%b", n = 6) +  
scale_fill_manual(values= c("darkseagreen4","darkseagreen", "darkseagreen3", "darkseagreen2")) + 
theme_light()

Несмотря на то, что у меня есть месяцы с октября по март, R обозначает сентябрь, а не декабрь.Кто-нибудь знает, что я здесь делаю не так?

1 Ответ

0 голосов
/ 17 мая 2018

zoo::as.yearmon ожидает %b то есть сокращенное название месяца (например, январь, февраль и т. Д.) В локали вашей системы.

В этом случае вы, кажется, используете месяц в немецком формате, но вы используете локальэто отличается.Вы можете проверить свои текущие настройки, используя

Sys.getlocale()


Таким образом, один из подходов может состоять в том, чтобы установить соответствующую локаль (или использовать данные с названием месяца в формате "English") перед запуском кода.

Sys.setlocale("LC_TIME", "de_DE")  #Mac
Sys.setlocale("LC_TIME", "German") #Windows
...