如何从单个行数据中放置图例

时间:2014-04-22 16:58:45

标签: r ggplot2

我有点困惑如何从单个数据而不是一组数据组中绘制图例。知道如何在右上角建立和添加一个美丽的传奇吗?

ano=c(1986, 1990, 1994, 1998, 2002, 2006, 2010)

reapresentacao = c(.66, .70, .72, .75, .78, NA, NA)
retencao = c(.39, .42, .50, .51, .50, NA,NA)
insucesso = c(.49, .50, .48, .50, .60, NA , NA)
institucionalizacao <- data.frame(ano, retencao, reapresentacao,insucesso)


p <-qplot(xlab="Eleições", ylab="Taxa de reapresentação, \n retenção e insucesso")
p <- p + geom_point(aes(x=institucionalizacao$ano, y=institucionalizacao$retencao), size =     I(8), colour = "grey10")
p <- p + geom_line(aes(x=institucionalizacao$ano, y=institucionalizacao$retencao), size =  I(5), colour = "grey10")
p <- p + geom_point(aes(x=institucionalizacao$ano, y=institucionalizacao$reapresentacao), size = I(8), colour = "grey45")
p <- p + geom_line(aes(x=institucionalizacao$ano, y=institucionalizacao$reapresentacao), size = I(5), colour = "grey45")
p <- p + geom_point(aes(x=institucionalizacao$ano, y=institucionalizacao$insucesso), size = I(8), colour = "grey75")
p <- p + geom_line(aes(x=institucionalizacao$ano, y=institucionalizacao$insucesso), size = I(5), colour = "grey75")
p <- p + theme_minimal(base_size = 18, base_family = "")
p <- p + scale_y_continuous(limits=RangeY, breaks=YBreaks, labels=YTickLabels, expand=c(0,0))
p <- p + scale_x_continuous(breaks = round(seq(min(institucionalizacao$ano), max(institucionalizacao$ano), by = 4),1))
print(p)

1 个答案:

答案 0 :(得分:1)

从我可以从其他答案中收集类似问题(例如this one...)你需要在aes()中分配颜色,但你还需要链接到数据框。我实现您要求的方式是使用melt包中的reshape2重塑您的数据框。这样,您可以将您在跟踪给定年份的年份中跟踪的三个不同变量。

library(ggplot2)
library(reshape2)
ano=c(1986, 1990, 1994, 1998, 2002, 2006, 2010)

reapresentacao = c(.66, .70, .72, .75, .78, NA, NA)
retencao = c(.39, .42, .50, .51, .50, NA,NA)
insucesso = c(.49, .50, .48, .50, .60, NA , NA)
group = c("reapresentacao","retencao","insucesso")
institucionalizacao <- data.frame(ano, retencao, reapresentacao,insucesso,)


# Using the reshape2 package you can reorganize your dataframe so that you can organiz
newdf = melt(institucionalizacao, id = c("ano"), measure.vars = c("reapresentacao","retencao","insucesso"),
             variable.name = "group", value.name = "value")

现在,您可以使用新数据框的结构,以便更轻松地绘制数据。 ggplot会自动分配颜色,然后您可以使用scale_color_manual进行个性化设置。

p <- ggplot() + 
  geom_point(data = newdf, aes(x=ano, y=value, colour = variable ), size = I(3)) +
  geom_line(data = newdf, aes(x=ano, y=value, colour = variable), size = I(1)) +
  labs(list(x="Eleições",y="Taxa")) +
  theme_minimal(base_size = 12, base_family = "") 
p    

ggplot1

通过为组名指定颜色并标记图例,手动更改比例的颜色。

  p + scale_color_manual(name  ="Change group name",
                         values=c("retencao"=        "grey10", 
                                  "reapresentacao"=  "grey45",
                                  "insucesso"=       "grey75"))

ggplot2