R中折线图ggplot2的手动图例标签

时间:2016-04-14 10:29:56

标签: r ggplot2

这似乎是一个相当基本的问题,但我对ggplot2来说相对较新,我似乎无法解决这个问题。如果有关于"语法的基本内容"我在这里误会,如果有人可以直接指出我,那就太好了。或者只是告诉我如何更改这些标签会很棒......

说我有这个(假的)数据:

avgTerms <- data.frame(itNum = seq(1,15),
                   i15 = runif(15,5,7),
                   i20 = runif(15,5.5,7.5),
                   i25 = runif(15,4,7),
                   i30 = runif(15,6,8))

我用它做了一个基本的线条图:

#colour palette (colorblind-friendly)
cbb <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
#plot
avgTermsplot <- ggplot(data=avgTerms, aes(itNum, avgTerms[,2]))
avgTermsplot <- avgTermsplot + geom_line(aes(itNum, avgTerms[,2], colour=cbb[2]))
avgTermsplot <- avgTermsplot + geom_line(aes(itNum, avgTerms[,3], colour=cbb[3]))
avgTermsplot <- avgTermsplot + geom_line(aes(itNum, avgTerms[,4], colour=cbb[4]))
avgTermsplot <- avgTermsplot + geom_line(aes(itNum, avgTerms[,5], colour=cbb[5]))
avgTermsplot <- avgTermsplot + labs(x="Iteration Number", y="Avg # of Tags Applied")

print(avgTermsplot)

如您所见,图例中的标签是颜色代码。没有用。我希望它们是data.frame中的列名。 (因为,它们应该是i15i20等等。)我尝试了很多东西,试图从矢量names(avgTerms)[2:5]中分配它们但不是那些东西似乎工作,所以我不会在这里列出所有。有没有一种简单的方法可以从字符向量中分配图例标签?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

建议以ggplot2的长格式使用数据,因此首先要融化您的数据:

library(reshape2)
avgTerms.m <- melt(avgTerms, id.vars = "itNum")

然后根据variable分配颜色:

ggplot(data = avgTerms.m, aes(itNum, value, colour = variable)) +
  geom_line() +
  labs(x = "Iteration Number", y = "Avg # of Tags Applied") +
  scale_colour_manual(values = cbb)

enter image description here