如何在ggplot中将颜色代码转换为字母标签

时间:2015-04-30 21:03:20

标签: r ggplot2

数据有4列(ProductType,M,P和O)和11行:

ProductType <- c("Instrument", "Refrigerator", "Laptop", "Toothpaste", 
                 "MobileApp", "Cars", "Haircut", "WristWatch",
                 "Cellphone", "Detergent", "Movie")
M <- c(3.00, 3.67, 3.60, 2.33, 2.80, 3.80, 1.44, 3.50, 3.85, 2.71, 3.86)
P <- c(2.29, 2.93, 3.33, 3.00, 2.29, 3.53, 3.53, 3.33, 3.54, 2.92, 3.71)
O <- c(3.00, 2.67, 2.60, 1.86, 3.20, 3.27, 3.07, 1.91, 3.07, 2.09, 4.15)
d <- data.frame(ProductType, M, P, O)

我希望在X轴上有产品类型(11个产品名称),并在同一个图中显示每种产品类型的M,P和O值。我可以创建情节。但是,现在图表的查看者应该看到图中的颜色编码点,并参考图例来查看颜色是否表示M,P或O.我怎么能有字母“M”,“P”,“ O“显示在图表中而不是带有相关颜色的点?换句话说,如何将红点更改为“M”,将蓝点更改为“P”,将绿点更改为“O”?

我使用的代码是:

ggplot(d, aes(ProductType,y='Source Importance' ,
              colour='Information Source', group=1)) + 
  geom_point(aes(y = M, colour = "M"),size = 10) + 
  geom_point(aes(y = O, colour = "O"),size = 10)+
  geom_point(aes(y = P, colour = "P"),size = 10)

1 个答案:

答案 0 :(得分:3)

通常更容易使用ggplot2“长”格式的数据,而不是“宽”格式。 reshape2包(以及其他包)可以进行此转换。

library("reshape2")
d.long <- melt(d, id.var="ProductType")

在该格式中,您的原始图表可以使用

呈现
ggplot(d.long) +
  geom_point(aes(x = ProductType, y = value, colour = variable), size = 10)

Alternative form of original graph

这些点可以通过将它们的形状设置为variable并使用一个比例来表现为单个字母,该比例表示准确使用的是什么,而不是映射到一组标准形状。

ggplot(d.long) +
  geom_point(aes(x = ProductType, y = value, shape = variable), size = 10) +
  scale_shape_identity()

graph with letters instead of shapes

作为一个好处,在这个版本中你可以看到为什么仪器M以前不可见(如评论中所述);它与仪器O完全相同,并且隐藏在它后面。