Cor específica de levar em um GGPLOT faceta-wrap

votos
0

enredo coluna que gostaria de cor de acordo com a estação Eu gostaria de especificar cor para a estação (Primavera / Outono) em uma trama múltiplas facetas da contagem e data. Eu tenho dados neste formato:

Date = c(06/13/2011, 10/26/2011, 05/28/2012, 11/11/2012, 05/25/2013, 10/31/2013, 06/09/2014, 11/03/2014, 05/14/2015, 10/24/2015, 05/03/2016, 10/13/2016, 05/24/2017, 10/16/2017, 06/09/2018, 10/05/2018)
Date = as.Date(Date, format = %m/%d/%Y)
y0_c = c(159375000, 29403750000, 0, 3665625000, 0, 25790000000, 0, 18636250000, 0, 13421875000, 0, 26098125000, 0, 1440625000, 82500000, 23101250000)
y1_c = c(1794375000, 313125000, 12065625000, 3148125000, 2883750000, 372500000, 2872500000, 790000000, 7604375000, 3496875000, 4042500000, 830000000, 20070000000, 10648750000, 771250000, 328750000)
y2_c = c(317500000, 42500000, 33750000, 62500000, 176875000, 331875000, 166250000, 54375000, 260000000, 116250000, 1068125000, 290000000, 438125000, 160000000, 2686250000, 1072500000)
y3_c = c(5625000, 5000000, 5625000, 1875000, 2500000, 4375000, 18125000, 7500000, 11875000, 22500000, 51250000, 37500000, 16250000, 31250000, 60000000, 38125000)

df = data.frame(Date, y0_c, y1_c, y2_c, y3_c)
df_melt = melt(df, id.vars = 'Date')

ggplot(dfc_melt, aes(x = Date, y = value)) + geom_col() + facet_wrap(~ variable, scales = 'free_y', ncol = 1)

Isso me dá uma trama como na imagem abaixo.

digite

Gostaria de colorir as barras de acordo com a época e tentou isso usando: Season = c(spring, Summer, Spring......)mas isso resultou em uma mensagem de aviso:

atributos não são idênticos em variáveis ​​de medida; eles serão descartados

... Estou um pouco perdido!

Obrigado antecipadamente se você é capaz de ajudar

Publicado 19/12/2018 em 14:18
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Eu tenho uma idéia do que você quer dizer e onde o seu problema. Para mim, parece que você está lutando com fazer uma nova temporada de coluna. Mesmo se eu estiver errado foi divertido para exercer um pouco.

Para me fazer uma função para verificar, em que época do Data em sua estrutura de dados é, é a chave. Depois de colocar os dois pacotes necessários tidyverse e reshape2 , a data de início de Primavera, Verão, Outono e no Inverno são definidos, seguido por uma função que faz com que a verificação acima mencionada. Esta função é então usado para criar uma nova coluna temporada .

Esta função aproveita o pacote lubridate que está incluído no tidyverse .

Com derretimento este quadro de dados é então transferido com as id.vars de Data e temporada . ggplot faz então um gráfico de barras com geom_col como eu acredito que é sobre o que você está procurando. O novo quadro de dados deve dar-lhe uma boa plataforma para criar outras versões de um enredo.

Como seus dados originais continha apenas datas na primavera ou no outono, eu mudei uma data para um encontro de verão para a verificação

library(tidyverse)
library(reshape2)

Date = c("06/13/2011", "10/26/2011", "07/28/2012", "11/11/2012", "05/25/2013", 
   "10/31/2013", "06/09/2014", "11/03/2014", "05/14/2015", "10/24/2015", "05/03/2016", 
    "10/13/2016", "05/24/2017", "10/16/2017", "06/09/2018", "10/05/2018")
Date = as.Date(Date, format = "%m/%d/%Y")
y0_c = c(159375000, 29403750000, 0, 3665625000, 0, 25790000000, 0, 18636250000, 0, 
   13421875000, 0, 26098125000, 0, 1440625000, 82500000, 23101250000)
y1_c = c(1794375000, 313125000, 12065625000, 3148125000, 2883750000, 372500000, 
   2872500000, 790000000, 7604375000, 3496875000, 4042500000, 830000000, 20070000000, 
   10648750000, 771250000, 328750000)
y2_c = c(317500000, 42500000, 33750000, 62500000, 176875000, 331875000, 166250000, 
   54375000, 260000000, 116250000, 1068125000, 290000000, 438125000, 160000000, 
   2686250000, 1072500000)
y3_c = c(5625000, 5000000, 5625000, 1875000, 2500000, 4375000, 18125000, 7500000, 
   11875000, 22500000, 51250000, 37500000, 16250000, 31250000, 60000000, 38125000)

winterStart <- "12-21"
springStart <- "03-23"
summerStart <- "06-21"
autumnStart <- "09-21"

season <- function(d) ifelse(d > ymd(paste(year(d), springStart, sep='-' )) &
                             d < ymd(paste(year(d),summerStart, sep='-')), 'spring',
                         ifelse(d > ymd(paste(year(d), summerStart, sep='-' )) &
                                    d < ymd(paste(year(d),autumnStart, sep='-')), 'summer',
                                ifelse(d > ymd(paste(year(d), autumnStart, sep='-' )) &
                                           d < ymd(paste(year(d),winterStart, sep='-')), 'autumn','winter')))

df = data.frame(Date, y0_c, y1_c, y2_c, y3_c)
df$season <- season(df[,1])
df.melt <- melt(df, id.vars = c("Date", 'season'))
df.melt <- melt(df, id.vars = c("Date", 'season'))

ggplot(df.melt, aes(Date, value, fill=season))+geom_col()

E aqui está a minha saída digite descrição da imagem aqui

Esperemos que este é sobre o que você está procurando.

Respondeu 19/12/2018 em 19:12
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more