数据有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)
答案 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)
这些点可以通过将它们的形状设置为variable
并使用一个比例来表现为单个字母,该比例表示准确使用的是什么,而不是映射到一组标准形状。
ggplot(d.long) +
geom_point(aes(x = ProductType, y = value, shape = variable), size = 10) +
scale_shape_identity()
作为一个好处,在这个版本中你可以看到为什么仪器M以前不可见(如评论中所述);它与仪器O完全相同,并且隐藏在它后面。