Измените цвет фона полярного графика в ggplot в соответствии с фактором

Я построил полярный график на основе кода, предоставленного М. Бэгготтом (http://rpubs.com/mattbagg/circular), чтобы суммировать число событий, происходящих по неделям в течение года. Вместо того, чтобы заполнять полосы по месяцам, есть ли способ оставить полосы серыми и заполнить фон в соответствии с месяцем (т. Е. 12 цветных секторов круга, представляющих месяц за серыми полосами частоты)? Спасибо

Полярный цвет графикаПолярный участок серый

Вот небольшое подмножество данных и мой код:

Week<- c(30, 21, 20, 26, 24, 22, 26, 26, 30, 25, 23, 23, 22, 24, 23, 22, 26, 20, 20, 23)

Month<- c("July", "May", "May","June", "June", "June", "June", "June", "July", "June", "June", "June", "June", "June", "June", "June", "July", "May", "May", "June")

df<- data.frame(Week=Week,Month=Month)

ggplot(df, aes(x = Week)) + 
       geom_histogram(breaks = seq(1, 52), colour = "white") + 
       coord_polar(start = 0) + 
       theme_minimal() + 
       scale_colour_gradient(colours=rainbow(12)) + 
       ylab("Count") + 
       ggtitle("Count by Week") + 
       scale_x_continuous("", limits = c(1, 52), breaks =c(1,5,9,13,18,22,26,31,35,39,44,48),labels=c("January","February","March","April","May","June","July","August","September","October","November", "December"))

person rkite    schedule 01.11.2017    source источник
comment
Вам нужно будет предоставить минимальные данные и пример кода   -  person pogibas    schedule 02.11.2017
comment
Я добавил небольшое подмножество и свой код в том виде, в котором он есть.   -  person rkite    schedule 02.11.2017


Ответы (1)


Вот идея:

используя geom_col для определения цветного фона с отдельным data.frame и дискретной шкалой, которая использует geom_bar.

library(ggplot2)
ggplot(df, aes(x = Week)) + 
  geom_col(data = data.frame(seq = as.factor(seq(1, 52)),
                             month =  factor(rep(c("January","February","March","April","May","June","July","August","September","October","November", "December"), 
                                          times = diff(c(0,5,9,13,18,22,26,31,35,39,44,48,52))),
                                          levels = c("January","February","March","April","May","June","July","August","September","October","November", "December")),
                             y = 4),
           aes(x = seq, y = y, fill = month), width = 1)+
  geom_bar(colour = "white", stat = "count", show.legend = F) + 
  theme_minimal() + 
  ylab("Count") + 
  ggtitle("Count by Week") + 
  coord_polar(start = 0)+
  scale_x_discrete(breaks =c(1,5,9,13,18,22,26,31,35,39,44,48)+2,
                   labels=c("January","February","March","April",
                            "May","June","July","August","September",
                            "October","November", "December"))

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

person missuse    schedule 01.11.2017
comment
Очень хорошо. Вы можете установить высоту динамически на основе исходных данных, заменив y = 4 на y = max(table(df)). - person Maurits Evers; 02.11.2017