title: R: ggplot, legend control using scale_shape_manual and one data frame
body: <p>Using scale shape manual in ggplot, I created different values for three different types of factories (squares, triangles, and circles), which corresponds to North, South, and West respectively.  Is it possible to have the North/South/West labels in the legend without creating three different data frames for each region?  Can I add these labels to the original data frame? </p>
  
  <p>I have one data frame for a plot (as recommended by the ggplot2 book), and with my code below, the default legend lists every row in my data frame, which is repetitive and not what I want.   </p>
  
  <p>Basically, I would like to know the best way to label these regions in the plot.  The only reason I would like to maintain one data frame is because the code will be easy to use over and over again by just switching the data frame (the benefit of one df mentioned in the ggplot2 book).</p>
  
  <p>I think part of the problem is that I am using scale shape manual to assign values to each point individually.  Should I put the North/South/West labels in my data frame and alter my scale shape manual? If so, what is the best way to accomplish this?</p>
  
  <p>Please let me know if my question is unclear. My code is below, and it replicates my plot as it stands. Thanks.</p>
  
  <pre><code>#Data frame
  points &lt;- c(3,5,4,7,12)
  bars &lt;- c(.8,1.2,1.4,2.1,4)
  points_df&lt;-data.frame(points) 
  row.names(points_df) &lt;- c( "Factory 1","Factory 2","Factory 3","Factory 4","Factory 5" )
  
  df&lt;-data.frame(Output=points,Errors=bars,lev.names= rownames(points_df))
  df$lev.names&lt;-factor(df$lev.names,levels=df$lev.names[order(df$Output)])
  
  # GGPLOT #
  library(ggplot2)
  library(scales)
  
  p2 &lt;- ggplot(df,aes(lev.names,Output,shape=lev.names))
  
  p2 &lt;- p2 +geom_errorbar(aes(ymin=Output-Errors, ymax=Output+Errors), width=0,color="gray40", lty=1, size=0) 
  
  p2 &lt;- p2 + geom_point(aes(size=2)) 
  
  p2 &lt;- p2  + scale_shape_manual(values=c(6,7,6,1,1))
  
  p2 &lt;- p2 + theme_bw() + xlab(" ") + ylab("Output")
  
  p2 &lt;- p2 + opts(title = expression("Production"))
  p2 &lt;- p2+ coord_flip()
  print(p2)
  </code></pre>