用符号替换geom_line的ggplot2图例键

时间:2011-10-03 11:18:42

标签: r ggplot2

我有三个股票的价格线图,我通过从我正在看的期间开始的百分比变化来标准化。这似乎工作得很好,但不是当前构成图例键的灰色背景上的彩色线条,我想要在关键标签旁边的正方形或彩色圆圈。

这在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)

2 个答案:

答案 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。

enter image description here

答案 1 :(得分:1)

ggplot中,图例与图表本身匹配。因此,要在图例中获取圆圈或正方形,您需要在图中添加圆圈或正方形。

可以使用geom_point(shape=...)完成此操作。 shape=1生成圈子,shape=7生成正方形。

chart1 + geom_point(shape=7)

enter image description here