R 闪避

R 闪避,r,ggplot2,R,Ggplot2,用这些数据 Data <- structure(list(StudyArea = c("AAA", "BBB", "CCC", "AAA", "BBB", "CCC", "AAA", "BBB", "CCC"), Obs = c(190L, 481L, 219L, 190L, 481L, 219L, 190L, 481L, 219L), InSituPred = c(180, 462, 199, 180, 462, 199, 180, 462, 199), InSituSE = c(

用这些数据

Data <- structure(list(StudyArea = c("AAA", "BBB", "CCC", "AAA", "BBB", 
"CCC", "AAA", "BBB", "CCC"), Obs = c(190L, 481L, 219L, 190L, 
481L, 219L, 190L, 481L, 219L), InSituPred = c(180, 462, 199, 
180, 462, 199, 180, 462, 199), InSituSE = c(9.57382456553708, 
16.5306359391421, 9.51070020039693, 9.57382456553708, 16.5306359391421, 
9.51070020039693, 9.57382456553708, 16.5306359391421, 9.51070020039693
), variable = c("ExSituAAA", "ExSituAAA", "ExSituAAA", "ExSituBBB", 
"ExSituBBB", "ExSituBBB", "ExSituCCC", "ExSituCCC", "ExSituCCC"
), value = c(NA, 500, 172, 156, NA, 161, 200, 562, NA), SE = c(20.8552264204181, 
16.1382421185167, 21.43693858142, 20.8552264204181, 16.1382421185167, 
21.43693858142, 20.8552264204181, 16.1382421185167, 21.43693858142
)), .Names = c("StudyArea", "Obs", "InSituPred", "InSituSE", 
"variable", "value", "SE"), row.names = c(NA, -9L), class = "data.frame")
这个密码呢

dodge <- position_dodge(width = 0.4)
p <- ggplot(Data, aes(x=StudyArea))+
  geom_point(aes(y=value, color=variable),size=3, shape=1,position=dodge)+
  geom_errorbar(aes(ymin=value-SE, ymax=value+SE, color=variable),position=dodge, lty = 2, cex=0.75)+
  geom_point(aes(y=InSituPred, color=StudyArea),size=3, shape=1)+
  geom_errorbar(aes(ymin=InSituPred-InSituSE, ymax=InSituPred+InSituSE, color=StudyArea ), lty=1,cex=0.75)+
  geom_point(aes(y=Obs, color=StudyArea),shape="*",size=12)

p +  scale_color_manual(name="Study Area \nPrediction", 
                        values=c("red", "blue", "darkgreen","red","blue","darkgreen"), 
                        breaks=c("ExSituAAA", "ExSituBBB", "ExSituCCC"))
我可以创造这个情节

我想避开实线两边的虚线,就像目前在StudyArea BBB中所做的那样。根据来自的有用评论,我尝试为变量列中的每个值添加唯一列,但减淡不会改变

建议如何使研究区AAA和CCC看起来像BBB,即居中实线和左右虚线,将不胜感激


谢谢

你大概是说你想水平移动它们,而不是垂直移动?是的,将它们水平地左右移动,而不是垂直移动。你必须手动避开它们。ggplot始终基于变量ExSituAAA(左)、ExSituBBB(中)、ExSituCCC(右)避开它们,但您希望基于与StudyArea的相似性避开它们。如果相同,则不回避,如果不相同,则以某种方式回避,并且无法在ggplot中指定该类型的内容。创建另一列,如果相同,则为0;如果不相同,则为+0.2或-0.2,然后将x美学设置为类似.numericfactorStudyArea+offset.column的值。或者只是计算出每一组的水平位置。@BrianDiggs,谢谢你的帮助。添加一个新列对于错误栏非常有效,但对于点来说却不是。我将x=as.numericfactorStudyArea+id添加到错误条aes中,该错误条正确闪避。然而,当我将相同的代码添加到geom_点时,我得到以下错误:离散值提供给连续刻度。如果需要的话,我可以编辑我的原始帖子来添加更多细节。想法?仅从你对新问题的描述来看,我没有任何建议。我会问一个新的问题,而不是编辑这个问题,因为即使你仍然试图达到同一点,错误的地方是不同的。
dodge <- position_dodge(width = 0.4)
p <- ggplot(Data, aes(x=StudyArea))+
  geom_point(aes(y=value, color=variable),size=3, shape=1,position=dodge)+
  geom_errorbar(aes(ymin=value-SE, ymax=value+SE, color=variable),position=dodge, lty = 2, cex=0.75)+
  geom_point(aes(y=InSituPred, color=StudyArea),size=3, shape=1)+
  geom_errorbar(aes(ymin=InSituPred-InSituSE, ymax=InSituPred+InSituSE, color=StudyArea ), lty=1,cex=0.75)+
  geom_point(aes(y=Obs, color=StudyArea),shape="*",size=12)

p +  scale_color_manual(name="Study Area \nPrediction", 
                        values=c("red", "blue", "darkgreen","red","blue","darkgreen"), 
                        breaks=c("ExSituAAA", "ExSituBBB", "ExSituCCC"))