Solución:
Para el formato de coma, debe incluir el scales
biblioteca para label=comma
. El “error” que mencionaste es en realidad solo una advertencia, porque usaste ambos ylim
y luego scale_y_continuous
. La segunda llamada anula la primera. En su lugar, puede establecer los límites y especificar etiquetas separadas por comas en una sola llamada a scale_y_continuous
:
library(scales)
ggplot(df, aes(x = Date, y = Cost))+
geom_line(lwd = 0.5) +
geom_line(aes(y = Cost_7), col="red", linetype = 3, lwd = 1) +
geom_line(aes(y = Cost_30), col="blue", linetype = 5, lwd = 0.75) +
xlim(c(left, right)) +
xlab("") +
scale_y_continuous(label=comma, limits=c(min(df$Cost[df$Date > left]),
max(df$Cost[df$Date > left])))
Otra opción sería fundir sus datos en un formato largo antes de trazar, lo que reduce la cantidad de código necesario y agiliza las asignaciones estéticas:
library(reshape2)
ggplot(melt(df, id.var="Date"),
aes(x = Date, y = value, color=variable, linetype=variable))+
geom_line() +
xlim(c(left, right)) +
labs(x="", y="Cost") +
scale_y_continuous(label=comma, limits=c(min(df$Cost[df$Date > left]),
max(df$Cost[df$Date > left])))
De cualquier manera, para poner los valores de y en términos de miles o millones, podría dividir los valores de y entre 1,000 o 1,000,000. he usado dollar_format()
a continuación, pero creo que también necesitará dividir por la potencia apropiada de diez si usa unit_format
(por sugerencia de @ joran). Por ejemplo:
div=1000
ggplot(melt(df, id.var="Date"),
aes(x = Date, y = value/div, color=variable, linetype=variable))+
geom_line() +
xlim(c(left, right)) +
labs(x="", y="Cost (Thousands)") +
scale_y_continuous(label=dollar_format(),
limits=c(min(df$Cost[df$Date > left]),
max(df$Cost[df$Date > left]))/div)
Usar scale_color_manual
y scale_linetype_manual
para configurar colores y tipos de línea personalizados, si lo desea.