在ggplot中使用两个数据框并且没有图例

时间:2015-11-21 02:28:44

标签: r ggplot2 legend

我在散点图中绘制了x和y变量,其中包含一个图例,该图例根据单个样本id变量为每个点提供形状和颜色。我想覆盖第二个数据框中的点,但是当我尝试从第二个数据框添加点时,我得到一个错误,说它无法找到我用于指定点的颜色和形状的变量原始数据框。我正在使用此代码:

p=ggplot(HebWater, aes(x = PCSrCa.24, y = SrIso, group = Location, 
color =     Location, shape = Location)) +
geom_point(size=6) +
scale_shape_manual(values = 1:17) +
theme(panel.grid.major=element_line(colour="white"),
panel.grid.minor=element_blank(),panel.background=element_rect(colour="black",fill="white"))
p
p1=p+geom_errorbar(aes(ymin=SrIso-SDSrIso*3, ymax=SrIso+SDSrIso*3))+
geom_errorbarh(aes(xmin=PCSrCa.24-SDSrCa*3, xmax=PCSrCa.24+SDSrCa*3))
p1
p2=p1+geom_point(data=HebOto, aes(SrCa,SrIso))
p2  

一切正常,直到我尝试运行图p2的代码,我已经成功地在同一个图上绘制了两个数据框,但无论我如何尝试改变形状,都无法正确显示图例,和颜色参数使用此代码:

ggplot(HebWater, aes(PCSrCa.24, SrIso))+
geom_errorbar(aes(ymin=SrIso-SDSrIso*3, ymax=SrIso+SDSrIso*3))+
scale_shape_manual(values=1:17)+
geom_errorbarh(aes(xmin=PCSrCa.24-SDSrCa*3, xmax=PCSrCa.24+SDSrCa*3))+
geom_point(data=HebOto, aes(SrCa,SrIso))+
geom_point(data=HebWater, show_guide=TRUE, shape=c(1:17), colour=c(1:17),  size=6)+
theme(panel.grid.major=element_line(colour="white"),
panel.grid.minor=element_blank(),
panel.background=element_rect(colour="black",fill="white"))

我的数据框都以这种方式组织:

> head(HebWater)
         Location   SrIso PCSrCa.24     SDSrIso    SDSrCa PCSrCa.28
1   Gib (baseflow) 0.70966 0.2911440 0.000643719 0.0308056 0.3396680
2 Fire (baseflow)  0.71006 0.1119312 0.000643719 0.0308056 0.1305864
3 Mad R (runoff)   0.71052 0.2043264 0.000643719 0.0308056 0.2383808

1 个答案:

答案 0 :(得分:1)

HebWater <- data.table(
  SrIso     = runif(20),
  SDSrIso   =  runif(20),
  PCSrCa.24 =  runif(20),
  SDSrCa    =  runif(20)
)
HebOto <- data.table(
  SrCa     = runif(20),
  SrIso   =  runif(20)
)

library(ggplot2)

ggplot(HebWater, aes(PCSrCa.24, SrIso))+
  geom_errorbar(aes(ymin=SrIso-SDSrIso*3, ymax=SrIso+SDSrIso*3))+
  scale_shape_manual(values=1:17)+
  geom_errorbarh(aes(xmin=PCSrCa.24-SDSrCa*3, xmax=PCSrCa.24+SDSrCa*3))+
  geom_point(data=HebOto, aes(SrCa,SrIso))+
  geom_point(data=HebWater, show_guide=TRUE, shape=c(1:17), colour=c(1:17),  size=6)

产生此错误:

Error: Incompatible lengths for set aesthetics: shape, colour, size

这对我来说似乎合乎逻辑,因为你修复第二个geom_point()中点的形状,颜色和大小。没有传说可以提供,因为那些根本不依赖于数据!如果您想要一个图例,则必须使用aes(shape=some_variable1, colour=some_variable2, size=some_variable3),然后在必要时使用scale_xxxxxx_manual()强制进行漫游。