ggplot excluir rótulos para o eixo x específicas

votos
0
library(tidyverse)

df <- data.frame(date = as.Date(c(2017-12-01, 2018-01-01, 2018-02-01, 
                                  2018-03-01, 2018-04-01, 2018-05-01, 
                                  2018-06-01, 2018-07-01, 2018-08-01, 
                                  2018-09-01, 2018-10-01, 2018-11-01)), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))

ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(date_breaks = 1 month, 
                 date_labels = %b) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

Eu quero manter o meu enredo mostrado abaixo, exatamente como é, com duas exceções. Eu quero remover o primeiro Novno rótulo do eixo x e o último Decno rótulo do eixo x. Eu adicionei coord_cartesian(xlim = as.Date(c(2017-12-01, 2018-11-01)))ao meu pedaço de código acima, mas isso elimina o preenchimento 'espaço em branco' em cada extremidade do meu eixo-x.

Como posso simplesmente dizer ggplot para eliminar o texto do primeiro e últimos rótulos do eixo x? Esta seria a primeira Novea última Dec. Observe que estes não existe no meu dfquadro de dados em todos os portanto dplyrfiltros provavelmente não vai funcionar.

digite

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


3 respostas

votos
2

Você poderia conseguir o que deseja, definindo breaks usando seq.date:

library(tidyverse);library(lubridate)

df <- data.frame(date = as.Date(c("2017-12-01", "2018-01-01", "2018-02-01", 
                                  "2018-03-01", "2018-04-01", "2018-05-01", 
                                  "2018-06-01", "2018-07-01", "2018-08-01", 
                                  "2018-09-01", "2018-10-01", "2018-11-01")), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))



ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(
               date_labels = "%b",
               breaks = seq.Date(ymd("2017-12-01"),ymd("2018-11-01"), by = "month")) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

digite descrição da imagem aqui

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

votos
1

Acho que isso é o que você quer. O date_breakssão desnecessárias.

ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(date_labels = "%b", breaks = df$date) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

enredo resultando

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

votos
0

Gostaria de sugerir pesquisando o pacote Lubridate em R - você seria capaz de converter todos os valores de data desarrumado em approrpiate formato POSIXT e também pode extrair informação mês muito facilmente - você também poderia converter essas datas em uma única coluna dos meses reais e uso que, como o seu rótulo de eixo, que é mais limpo como você teria uma coluna adicional de apenas o mês correspondente - você também pode preencher com base nesse mês e fazer algumas outras coisas legais!

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

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