同一价格图中的不同颜色
Different color in the same price plot
我必须根据 kmeans
函数给出的聚类对价格图进行不同的着色。考虑这段代码:
library(tseries)
####
nomiequity <- "^IXIC"
datastart <- "2019-09-18"
nsdq.prices <- get.hist.quote(instrument = nomiequity,
compression = "d",
start = datastart,
end = "2020-12-31",
retclass = "zoo",
quote = "AdjClose")
b<-kmeans(nsdq.prices,3)
c<-b$cluster
d<- merge(nsdq.prices, c)
e<-split(nsdq.prices, c)
plot(nsdq.prices, type="l", col="green", ylim=c(6000, 13000))
lines(e[["2"]], type = "l", col="red")
lines(e[["3"]], type = "l", col="blue")
结果几乎就是我需要做的,但我不想在不同的时间显示相同颜色之间的那些联系。
希望这段代码对您有所帮助:
library(tseries)
####
nomiequity <- "^IXIC"
datastart <- "2019-09-18"
nsdq.prices <- get.hist.quote(instrument = nomiequity,
compression = "d",
start = datastart,
end = "2020-12-31",
retclass = "zoo",
quote = "AdjClose")
b<-kmeans(nsdq.prices,3)
c<-b$cluster
d<- merge(nsdq.prices, c)
e<-split(nsdq.prices, c)
e3= e[['3']]
empty <- zoo(order.by=seq.Date(head(index(e3),1),tail(index(e3),1),by="days"))
e3=merge(e3,empty)
e2= e[['2']]
empty <- zoo(order.by=seq.Date(head(index(e2),1),tail(index(e2),1),by="days"))
e2=merge(e2,empty)
plot(nsdq.prices, type="l", col="green", ylim=c(6000, 13000))
lines(e2, type = "l", col="red")
lines(e3, type = "l", col="blue")
我刚用过这个:R: Filling missing dates in a time series?
问题是集群在 line
中合并。当集群在时间序列中发生变化时,您可以使用 rle
长度将数字增加一。为此,使用 Map
来 rep
吃连续数字 l
次。然后,您可以 split
这些不断增长的数字,但使用 cl
uster 来定义 lines
的颜色。对于后者,使用 lapply
循环拆分的 e
.
cl <- kmeans(nsdq.prices, 3)$cluster
l <- rle(as.numeric(cl))$lengths
s <- Map(rep, seq(l), l)
e <- split(cbind(nsdq.prices, cl), unlist(s))
plot(nsdq.prices, type="l", col=7, ylim=c(6000, 13000))
invisible(lapply(e, function(x) lines(x$Adjusted, col=x$cl + 1)))
legend("topleft", leg=c(sprintf("cl %s", 1:3), "missing"), col=c((1:3)+1, 7), lty=1)
没有定义日期的地方会出现空白。我们可以使用 zoo
插值法,通过使用“缺失”颜色重绘原始图。
通过这种方法,我找到了聚类值发生变化的行,然后选择了这些日期并添加了 NA 值以进行调整。 geom_line 在出现 NA 值时中断,从而给出所需的结果。
library(ggplot2)
library(dplyr)
library(data.table)
#add date as a column
datum <- index(d)
d <- as.data.table(d)
d$Datum <- datum
#add row number as a column
d$Row <- 1:nrow(d)
#find rows of d where cluster value changes
rows <- which(d$c != dplyr::lag(d$c))
rows <- d[Row %in% rows]
#add NA values for Adjusted at the Dates where values change(which breaks the geom_line)
rows <- rows[, Adjusted := NA]
#merge rows (NA values of Adjusted) with d
d <- rbind(rows, d)
#create a plot
ggplot(d, aes(x = Datum, y = Adjusted, col = as.factor(c))) + geom_line() + scale_color_manual(values = c("green", "red", "blue"))
我必须根据 kmeans
函数给出的聚类对价格图进行不同的着色。考虑这段代码:
library(tseries)
####
nomiequity <- "^IXIC"
datastart <- "2019-09-18"
nsdq.prices <- get.hist.quote(instrument = nomiequity,
compression = "d",
start = datastart,
end = "2020-12-31",
retclass = "zoo",
quote = "AdjClose")
b<-kmeans(nsdq.prices,3)
c<-b$cluster
d<- merge(nsdq.prices, c)
e<-split(nsdq.prices, c)
plot(nsdq.prices, type="l", col="green", ylim=c(6000, 13000))
lines(e[["2"]], type = "l", col="red")
lines(e[["3"]], type = "l", col="blue")
希望这段代码对您有所帮助:
library(tseries)
####
nomiequity <- "^IXIC"
datastart <- "2019-09-18"
nsdq.prices <- get.hist.quote(instrument = nomiequity,
compression = "d",
start = datastart,
end = "2020-12-31",
retclass = "zoo",
quote = "AdjClose")
b<-kmeans(nsdq.prices,3)
c<-b$cluster
d<- merge(nsdq.prices, c)
e<-split(nsdq.prices, c)
e3= e[['3']]
empty <- zoo(order.by=seq.Date(head(index(e3),1),tail(index(e3),1),by="days"))
e3=merge(e3,empty)
e2= e[['2']]
empty <- zoo(order.by=seq.Date(head(index(e2),1),tail(index(e2),1),by="days"))
e2=merge(e2,empty)
plot(nsdq.prices, type="l", col="green", ylim=c(6000, 13000))
lines(e2, type = "l", col="red")
lines(e3, type = "l", col="blue")
我刚用过这个:R: Filling missing dates in a time series?
问题是集群在 line
中合并。当集群在时间序列中发生变化时,您可以使用 rle
长度将数字增加一。为此,使用 Map
来 rep
吃连续数字 l
次。然后,您可以 split
这些不断增长的数字,但使用 cl
uster 来定义 lines
的颜色。对于后者,使用 lapply
循环拆分的 e
.
cl <- kmeans(nsdq.prices, 3)$cluster
l <- rle(as.numeric(cl))$lengths
s <- Map(rep, seq(l), l)
e <- split(cbind(nsdq.prices, cl), unlist(s))
plot(nsdq.prices, type="l", col=7, ylim=c(6000, 13000))
invisible(lapply(e, function(x) lines(x$Adjusted, col=x$cl + 1)))
legend("topleft", leg=c(sprintf("cl %s", 1:3), "missing"), col=c((1:3)+1, 7), lty=1)
没有定义日期的地方会出现空白。我们可以使用 zoo
插值法,通过使用“缺失”颜色重绘原始图。
通过这种方法,我找到了聚类值发生变化的行,然后选择了这些日期并添加了 NA 值以进行调整。 geom_line 在出现 NA 值时中断,从而给出所需的结果。
library(ggplot2)
library(dplyr)
library(data.table)
#add date as a column
datum <- index(d)
d <- as.data.table(d)
d$Datum <- datum
#add row number as a column
d$Row <- 1:nrow(d)
#find rows of d where cluster value changes
rows <- which(d$c != dplyr::lag(d$c))
rows <- d[Row %in% rows]
#add NA values for Adjusted at the Dates where values change(which breaks the geom_line)
rows <- rows[, Adjusted := NA]
#merge rows (NA values of Adjusted) with d
d <- rbind(rows, d)
#create a plot
ggplot(d, aes(x = Datum, y = Adjusted, col = as.factor(c))) + geom_line() + scale_color_manual(values = c("green", "red", "blue"))