我使用的是带有时间刻度的折线图,最后一个点是12月30日。但是,对于scale_x_date,即使该月有数据点,1月也会出现在比例上。
规模应该在上个月真正停止,但我相信这是因为这一天。有没有办法让规模坚持数据中的实际月份?
我用它来格式化比例:
#with lubridate
data$month <- ymd(data$month)
#in the plot
scale_x_date(date_breaks = "1 month", date_labels ="%b %y")
可重复的例子:
library(lubridate)
library(ggplot2)
cities <- c("city1")
month <- c("2016-08-01", "2016-09-30", "2016-10-30", "2016-11-30", "2016-12-30")
num <- c(23287, 23889, 25026, 26116, 29758)
data <- data.frame(cities, month, num)
data$month <- ymd(data$month)
gg <- ggplot(data, aes(month, num, group = 1)
gg <- gg + geom_line(position = "identity", color="#6baed6")
gg <- gg + scale_y_continuous(expand = (c(0.1,0)))
gg <- gg + scale_x_date(expand = c(0, 0), date_labels ="%b %y")
gg <- gg + labs(x = NULL, y = NULL)
gg <- gg + theme(strip.background=element_blank())
gg <- gg + theme_bw()
gg <- gg + theme(panel.border = element_blank())
gg <- gg + theme(panel.grid.major = element_blank())
gg <- gg + theme(panel.grid.minor = element_blank())
gg <- gg + theme(axis.ticks=element_blank())
gg <- gg + theme(axis.text.x=element_text(size=12))
gg <- gg + theme(axis.text.y=element_text(size=12))
gg
在这个例子中,没有expand(),即使1月份没有数据点,也会添加1月。
每月有一个数据点,我的目标是按月显示数据。我可以转换为因子,但这并不理想。我知道数据有一天,但肯定有办法做到这一点。
答案 0 :(得分:4)
我不认为这是一个好的情节,但是你在这里。您可能希望将休息时间设置为每月的第15天:
library(ggplot2)
ggplot(data, aes(month, num, group = 1)) +
geom_line(position = "identity", color="#6baed6") +
#scale_y_continuous(expand = (c(0.1,0)), labels = comma) +
scale_x_date(breaks = seq(as.Date("2016-07-15"),
as.Date("2016-12-15"), by = "1 month"), date_labels ="%b %y") +
labs(x = NULL, y = NULL) +
theme_bw() +
theme(strip.background=element_blank(),
panel.border = element_blank(),
panel.grid = element_blank(),
axis.ticks=element_blank(),
axis.text=element_text(size=12))