我有三个股票的价格线图,我通过从我正在看的期间开始的百分比变化来标准化。这似乎工作得很好,但不是当前构成图例键的灰色背景上的彩色线条,我想要在关键标签旁边的正方形或彩色圆圈。
这在ggplot2中是否可行?任何指针,无论多么简短,都赞赏。生成图表的代码如下所示。
Date <- c("2011-09-19","2011-09-20","2011-09-21","2011-09-22",
"2011-09-23","2011-09-26","2011-09-27","2011-09-28","2011-09-29","2011-09-30")
CoA <- c(100,100,95,93,88,91,98,109,115,106)
CoB <- c(16.5,16.8,17.2,17,17.5,16.5,16,15.5,16.1,16.3)
CoC <- c(3.2,3.18,3.15,3.12,3.15,3.1,3.08,3.11,3.35,3.42)
prices <- data.frame(Date,CoA,CoB,CoC)
changes <- as.data.frame(matrix(nrow=nrow(prices),ncol=ncol(prices)))
changes[,1]=prices[,1]
for(i in 2:ncol(prices)){ # calculate changes in price
changes[,i]= (prices[,i]-prices[,i][1])/prices[,i][1]
}
colnames(changes) <- colnames(prices)
changes <- melt(changes, id = "Date")
changes$Date <- as.Date(as.character(changes$Date))
chart1 <- ggplot(data=changes,aes(x=changes$Date,y=changes$value,colour=changes$variable))
chart1 <- chart1 + geom_line(lwd=0.5) + ylab("Change in price (%)") + xlab("Date") +
labs(colour="Company")
print(chart1)
答案 0 :(得分:7)
您可以像这样定义新的geom:
GeomLine2 <- proto(GeomLine, {
objname <- "line2"
guide_geom <- function(.) "polygon"
default_aes <- function(.) aes(colour = "black", size=0.5, linetype=1, alpha = 1, fill = "grey20")
})
geom_line2 <- GeomLine2$build_accessor()
chart1 <- ggplot(data=changes,aes(x=Date, y=value, colour=variable, fill = variable))
chart1 <- chart1 + geom_line2(lwd=0.5) + ylab("Change in price (%)") + xlab("Date") +
labs(colour="Company", fill = "Company")
print(chart1)
不确定,但请注意,这不适用于下一版本的ggplot2。
答案 1 :(得分:1)
在ggplot
中,图例与图表本身匹配。因此,要在图例中获取圆圈或正方形,您需要在图中添加圆圈或正方形。
可以使用geom_point(shape=...)
完成此操作。 shape=1
生成圈子,shape=7
生成正方形。
chart1 + geom_point(shape=7)