R 使用ggplot2将点添加到绘图

R 使用ggplot2将点添加到绘图,r,plot,ggplot2,R,Plot,Ggplot2,这是我的数据集的前9行(54行中的前9行)和前8列(1003列中的前8列) stream n rates means 1 2 3 4 1 Brooks 3 3.0 0.9629152 0.42707006 1.9353659 1.4333884 1.8566225 2 Siouxon 3 3.0 0.5831929 0.90503736 0.2838483 0.2838483 1.0023212 3

这是我的数据集的前9行(54行中的前9行)和前8列(1003列中的前8列)

 stream n rates     means          1         2         3         4
 1   Brooks 3   3.0 0.9629152 0.42707006 1.9353659 1.4333884 1.8566225
 2  Siouxon 3   3.0 0.5831929 0.90503736 0.2838483 0.2838483 1.0023212
 3 Speelyai 3   3.0 0.6199235 0.08554021 0.7359903 0.4841935 0.7359903
 4   Brooks 4   7.5 0.9722707 1.43338843 1.8566225 0.0000000 1.3242210
 5  Siouxon 4   7.5 0.5865031 0.50574543 0.5057454 0.2838483 0.4756304
 6 Speelyai 4   7.5 0.6118634 0.32252396 0.4343109 0.6653132 2.2294652
 7   Brooks 5  10.0 0.9637475 0.88984211 1.8566225 0.7741612 1.3242210
 8  Siouxon 5  10.0 0.5804420 0.47501800 0.7383634 0.5482181 0.6430847
 9 Speelyai 5  10.0 0.5959238 0.15079491 0.2615963 0.4738504 0.0000000
下面是一个简单的绘图,我使用
means
列中的值绘制了所有流名为Speelyai(18)的行

平均值列是通过取整行的平均值来计算的。每列代表1个模拟。所以,平均值列是1000次模拟的平均值。我还想在绘图上绘制实际模拟值。我认为,不仅要绘制平均值(用一条线),而且要将“原始”数据(模拟)显示为点,这将是有益的。我知道我可以使用
geom_point()
,但不确定如何获取流名称为“Speelyai”的任何行的所有点

谢谢



正如你所看到的,比例是非常不同的,这是我假设的,因为这些点是模拟的结果,或者是原始数据的重采样。但是,我怎样才能在我的原始图像上覆盖这些点,以保持视觉内容?在这张图中,线条看起来几乎是平的,但在我的原始图像中,我们可以看到它波动很大,只是在小范围内…

我建议将数据重新格式化为长格式,而不是宽格式。例如:

library("tidyr")
library("ggplot2")
my_data_tidy <- gather(my_data, column, value, -c(stream, n, rates, means))
ggplot(subset(my_data_tidy, stream == "Speelyai"), aes(rates, value)) +
  geom_point() +
  stat_summary(fun.y = "mean", geom = "line")

同意@NickKennedy的观点,从宽到长重塑数据是一个好主意:

library(reshape)
x2<-melt(x,id=c("stream","n","rates"))
x2<-x2[which(x2$variable!="means"),] # this eliminates the entries for means
然后将调用更改为
geom_point

df2 <- data.frame(stream=c('Brooks', 'Siouxon', 'Speelyai'), 
      value=c(0.944062036, 0.585852702, 0.583984402), stringsAsFactors=FALSE)
x2$error <- x2$value-df2$value[match(x2$stream, df2$stream)]    
geom_point(data=x2[x2$stream=="Speelyai",],aes(rates,error))

我懂了。我想你的第一个ggplot代码计算平均值不是什么大不了的事,它仍然应该得到相同的值。生成的图像看起来与我最初发布的图像大不相同。我不知道如何将该图像添加到此评论中以向您展示。如何不同?在没有看到完整数据的情况下很难进行检查,尽管现在绘制了18000个点。您可能需要使用
alpha
使绘图可用。请注意,即使绘制错误,y范围仍将足够大(约4个单位)以平滑均值曲线(我理解您希望显示为急剧变化),但“您无法隐藏事实”;)是的,你是对的!这和问题所在的范围是一样的。。。。啊!我不知道该怎么办。。。。
library(ggplot2)
p<-ggplot(means.sp,aes(rates,mean.stream))+geom_line()
p<-p+geom_point(data=x2[x2$stream=="Speelyai",],aes(rates,value))
df2 <- data.frame(stream=c('Brooks', 'Siouxon', 'Speelyai'), 
      value=c(0.944062036, 0.585852702, 0.583984402), stringsAsFactors=FALSE)
x2$error <- x2$value-df2$value[match(x2$stream, df2$stream)]    
geom_point(data=x2[x2$stream=="Speelyai",],aes(rates,error))