我正在使用一个简单的ggplot函数,但是scales_x_date
工作正常。为什么会这样?
这是我的代码
out <- list(NULL)
datess <- seq(as.Date("1984-01-01"), as.Date("2014-01-01"), by="year")
for(i in 1:5){
tokyosunt <- sunt[(1+2190*(i-1)):(2190*i), 8]
dates <- c(datess[(1+6*(i-1)):(6*i)], datess[6*i+1]-1)
out[[i]] <- ggplot(tokyosunt, aes(x=index(tokyosunt), y=Tokyo)) +
xlab("") +
scale_x_date(breaks=dates, labels=date_format("%Y/%m/%d")) +
ylab("") +
geom_line()
}
png(filename="[3]dailytokyo.png", width = 750, height = 1000, units = "px", pointsize = 12)
grid.arrange(out[[1]],out[[2]],out[[3]],out[[4]],out[[5]],
ncol=1, nrow=5, left="daily")
dev.off()
“sunt”是xts型数据框,形式为“1984-01-01”到“2014-12-31”。
此代码有效,但未显示out[[1]]
,out[[2]]
和out[[3]]
的比例。在out[[4]]
中,只显示了第一个scale(2007-12-31)
。通常显示out[[5]]
的比例。
我认为scales_x_date
会覆盖之前的out[[2]]
覆盖out[[1]]
覆盖out[[3]]
,out[[2]]
覆盖multiSelectParticipant = $("#select_multi_participant").kendoMultiSelect({
autoBind: true,
dataTextField: "details",
dataValueField: "resource_id",
filter: "contains",
dataSource: resources,
itemTemplate: '#= details #',
tagTemplate: '#= resource_name #',
select: onSelect,
change: function (e) {
multiParticipants = this.value();
isMultiParticipantsChange = true;
},
}).data("kendoMultiSelect");
$("#txtGroupCapicity").change(function () {
groupCapicity = $("#txtGroupCapicity").val();
$("#select_multi").data("kendoMultiSelect").options.maxSelectedItems = (groupCapicity - 1);
});
function onSelect(e) {
resourceTooltip = e.sender.wrapper.kendoTooltip({
position: "top",
content: e.item.text(),
autoHide: true,
width: 250,
height: 20,
animation: {
duration: 0
}
}
);
}
,依此类推。我错过了什么?我该如何纠正呢?
答案 0 :(得分:2)
我喜欢弄清楚人们在做什么,但这个问题很艰难。我玩你的代码得到了:
library(ggplot2)
library(scales)
library(gridExtra)
library(zoo)
ncol <- 8
nrow <- 5*2190
sunt <- data.frame(matrix(rnorm(ncol*nrow),nrow,ncol))
out <- list(NULL)
datess <- seq(as.Date("1984-01-01"), as.Date("2014-01-01"), by="year")
for(i in 1:5){
tokyosunt <- data.frame(sunt[(1+2190*(i-1)):(2190*i), 8])
names(tokyosunt) <- "Tokyo"
tokyosunt$x <- as.Date(index(tokyosunt)*5,origin=as.Date("1984-01-01"))
dates <- c(datess[(1+6*(i-1)):(6*i)], datess[6*i+1]-1)
out[[i]] <- ggplot(tokyosunt, aes(x=x, y=Tokyo)) +
xlab("") +
scale_x_date(breaks=dates, labels=date_format("%Y/%m/%d")) +
ylab("") +
geom_line() +
theme(axis.text.x = element_text(angle=-45,hjust=-0.1))
}
#png(filename="[3]dailytokyo.png", width = 750, height = 1000, units = "px",
pointsize = 12)
grid.arrange(out[[1]],out[[2]],out[[3]],out[[4]],out[[5]],
ncol=1, nrow=5, left="daily")
#dev.off()
这给了我这个。哪个没有错误,可能是也可能不是你想要的:
答案 1 :(得分:1)
似乎你想要将6年的时间序列绘制在彼此之下。如果对先前计算的timespans因子使用facet_wrap
,则代码会减少到几行:
library(ggplot2)
library(scales)
library(xts)
set.seed(123)
sunt <- as.xts(rnorm(10958), seq(as.Date("1984-01-01"), as.Date("2014-01-01")-1,by="days"))
names(sunt) <- "Tokyo"
# Divide the time-series into 6 year periods
sunt$period <- cut(x = time(sunt), breaks = "6 years")
ggplot(sunt, aes(x = index(sunt), y = Tokyo)) + xlab("") + ylab("") + geom_line() +
scale_x_date(labels = date_format("%Y/%m/%d")) +
facet_wrap(~period, scales = "free_x", ncol = 1) +
theme(strip.background = element_blank(), strip.text = element_blank())
如果您使用cut
对时间序列进行细分,那么您可以从闰年中获益,这似乎是您错过的事情(1984年至2014年间有8个闰年)。