R:ggplot,使用scale_shape_manual和一个数据帧的图例控件

时间:2013-07-11 19:12:06

标签: r ggplot2

在ggplot中使用比例形状手册,我为三种不同类型的工厂(正方形,三角形和圆形)创建了不同的值,分别对应于北,南和西。是否可以在图例中包含北/南/西标签而不为每个区域创建三个不同的数据框?我可以将这些标签添加到原始数据框吗?

我有一个绘图数据框(由ggplot2书推荐),并且我的代码在下面,默认图例列出了我的数据框中的每一行,这是重复的而不是我想要的。

基本上,我想知道在图中标记这些区域的最佳方法。我想维护一个数据帧的唯一原因是因为只需切换数据帧就可以一次又一次地使用代码(ggplot2书中提到的一个df的好处)。

我认为部分问题在于我使用比例形状手动为每个点单独分配值。我应该将North / South / West标签放在我的数据框中并更改我的比例形状手册吗?如果是这样,那么实现这一目标的最佳方法是什么?

如果我的问题不清楚,请告诉我。我的代码在下面,它复制了我的情节。感谢。

#Data frame
points <- c(3,5,4,7,12)
bars <- c(.8,1.2,1.4,2.1,4)
points_df<-data.frame(points) 
row.names(points_df) <- c( "Factory 1","Factory 2","Factory 3","Factory 4","Factory 5" )

df<-data.frame(Output=points,Errors=bars,lev.names= rownames(points_df))
df$lev.names<-factor(df$lev.names,levels=df$lev.names[order(df$Output)])

# GGPLOT #
library(ggplot2)
library(scales)

p2 <- ggplot(df,aes(lev.names,Output,shape=lev.names))

p2 <- p2 +geom_errorbar(aes(ymin=Output-Errors, ymax=Output+Errors), width=0,color="gray40", lty=1, size=0) 

p2 <- p2 + geom_point(aes(size=2)) 

p2 <- p2  + scale_shape_manual(values=c(6,7,6,1,1))

p2 <- p2 + theme_bw() + xlab(" ") + ylab("Output")

p2 <- p2 + opts(title = expression("Production"))
p2 <- p2+ coord_flip()
print(p2)

1 个答案:

答案 0 :(得分:1)

是的,将位置放在data.frame中并在aes映射中使用它:

df$location <- c("North","South","North","West","West")

p2 <- ggplot(df,aes(lev.names,Output,shape=location)) +
  geom_errorbar(aes(ymin=Output-Errors, ymax=Output+Errors), 
                width=0,color="gray40", lty=1, size=0) +
  geom_point(size=3) + 
  theme_bw() + xlab(" ") + ylab("Output") +
  ggtitle(expression("Production")) +
  coord_flip()
print(p2)

我还修复了其他一些内容(例如,opts已弃用,您不想映射size,而是设置它。