¿Cómo mostrar cada segundo valor de etiqueta del eje x R ggplot2?
Quiero mostrar cada segundo de la lista de etiquetas del eje x en la presentación. Ejemplo de código simplificado a continuación y su salida en la Fig. 1, donde se muestran cuatro fechas, pero se deben omitir # 2 y # 4.
# https://stackoverflow.com/a/6638722/54964
require(ggplot2)
my.dates = as.Date(c("2011-07-22","2011-07-23",
"2011-07-24","2011-07-28","2011-07-29"))
my.vals = c(5,6,8,7,3)
my.data <- data.frame(date =my.dates, vals = my.vals)
plot(my.dates, my.vals)
p <- ggplot(data = my.data, aes(date,vals))+ geom_line(size = 1.5)
Resultado esperado: salte las fechas segunda y cuarta.
Código actualCódigo real donde debido arev(Vars)
lógica, no puedo aplicaras.Date
a los valores en cada categoría; La variablemolten
tiene una columnaDates
p <- ggplot(molten, aes(x = rev(Vars), y = value)) +
geom_bar(aes(fill=variable), stat = "identity", position="dodge") +
facet_wrap( ~ variable, scales="free") +
scale_x_discrete("Column name dates", labels = rev(Dates))
Salida esperada: omita los valores n. ° 2, n. ° 4, ... en cada categoría. Pensé aquí cambiandoscale_x_discrete
ascale_x_continuous
y tener una secuencia de descansobreaks = seq(1,length(Dates),2))
enscale_x_continuous
pero falla debido al siguiente error.
Error: `breaks` and `labels` must have the same length
Propuesta basada en los comentarios de JuanCódigo
ggplot(data = my.data, aes(as.numeric(date), vals)) +
geom_line(size = 1.5) +
scale_x_continuous(breaks = pretty(as.numeric(rev(my.data$date)), n = 5))
Salida
Error: Discrete value supplied to continuous scale
Probar la aplicación de propuesta de EricWatt en el código realPropuesta de código
p <- ggplot(molten, aes(x = rev(Vars), y = value)) +
geom_bar(aes(fill=variable), stat = "identity", position="dodge") +
facet_wrap( ~ variable, scales="free") +
scale_x_discrete("My dates", breaks = Dates[seq(1, length(Dates), by = 2)], labels = rev(Dates))
Salida
Error: `breaks` and `labels` must have the same length
Si usted tienescale_x_discrete("My dates", breaks = Dates[seq(1, length(Dates), by = 2)])
, obtienes el eje x sin ninguna etiqueta tan en blanco.
Fig. 1 Salida del ejemplo de código simplificado, Fig. 2 Salida de la primera propuesta de EricWatt
SO: Debian 9
R: 3.4.0