开发者

Replacing ggplot2 legend key for geom_line with symbol

开发者 https://www.devze.com 2023-04-09 23:05 出处:网络
I have a line plot of prices for three stocks, which I normalise by taking the percentage change from the beginning of the period I am looking at. This seems to work fine, but instead of the coloured

I have a line plot of prices for three stocks, which I normalise by taking the percentage change from the beginning of the period I am looking at. This seems to work fine, but instead of the coloured lines on a grey background that currently make up the legend key, I would like squares or circles of colour next to the key label.

Is this even possible in ggplot2? Any pointers, however brief, appreciated. Code to produce the chart follows below.

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


You can define new geom like this:

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)

Not sure but note that this will not work in the next version of ggplot2.

Replacing ggplot2 legend key for geom_line with symbol


In ggplot the legend matches the plot itself. So, to get circles or squares in the legend you need to add circles or squares to the plot.

This can be done with geom_point(shape=...). shape=1 generates circles, shape=7 generates squares.

chart1 + geom_point(shape=7)

Replacing ggplot2 legend key for geom_line with symbol

0

精彩评论

暂无评论...
验证码 换一张
取 消