【发布时间】:2020-10-02 22:41:27
【问题描述】:
我想以特定间隔将列的平均值添加为点/文本。
我有这个情节:
我的数据框包含以下数据:
structure(list(optz = c(1067, 1067, 1067, 1067, 1067, 1067, 1067,
1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067), e_val = c(6.1565,
5.4915, 4.647, 3.7871, 5.2397, 5.8252, 4.647, 5.8252, 4.5617,
4.3906, 5.0711, 5.9082, 4.7321, 4.9866, 4.8171, 3.7003, 5.4078,
4.0467, 4.7321, 4.647, 4.647, 5.0711, 4.0467, 4.9019, 5.3238,
4.9866, 5.2397, 4.0467, 5.2397, 5.3238, 4.7321, 3.5262, 6.1565,
3.4389, 5.6587, 5.742, 4.7321, 5.3238, 4.7321, 4.647, 4.0467,
5.0711, 4.4762, 4.5617, 4.9019, 4.3906, 3.2638, 4.8171, 3.2638,
4.647, 4.3049, 3.5262, 4.3906, 4.1329, 4.4762, 4.0467, 5.1555,
5.1555, 3.3514, 3.3514), Ctime = c(100.8656, 105.7428, 113.8558,
108.7743, 103.1432, 111.9795, 108.8254, 107.0829, 99.2327, 100.002,
88.4304, 105.3633, 106.6242, 98.2432, 102.5163, 110.1165, 95.3913,
95.3288, 108.5169, 114.2813, 152.393, 164.0396, 135.2379, 161.8865,
162.6032, 139.7406, 163.0824, 167.3038, 155.7465, 166.0113, 159.9243,
147.9156, 153.5766, 160.7025, 168.5825, 138.6539, 140.4861, 135.3083,
153.4059, 152.83, 214.338, 214.0513, 192.4158, 203.7792, 216.6077,
202.8908, 205.3991, 216.3706, 215.6574, 210.9652, 190.4783, 182.6495,
205.7483, 199.6231, 194.0155, 203.9086, 196.9656, 205.351, 186.1295,
173.8961), step = c(20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L,
20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 30L, 30L,
30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L,
30L, 30L, 30L, 30L, 30L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L,
40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L, 40L),
method = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L), .Label = c("QV", "VN"), class = "factor")), row.names = 2:61, class = "data.frame")
我的代码是:
ggplot(data = df, aes(x = Ctime, y = e_val, group = method, color = method)) +
stat_smooth(data = df, level = 0.8) +
ggtitle('M1 vs M2 _ time')+
ylab('e_val')+
xlab('Ctime')
我想将step 列的平均值添加到轴x 上(动态)出现的间隔上。
例如对于轴 x 上显示的自动生成的间隔 {120, 160, 200}:
mean(df[df$method=='QV' & (df$Ctime - df$Ctime %% 120 == 0),]$step) # 20
mean(df[df$method=='QV' & (df$Ctime - df$Ctime %% 160 == 0),]$step) # 24.44
mean(df[df$method=='QV' & (df$Ctime - df$Ctime %% 200 == 0),]$step) # 28.88
mean(df[df$method=='VN' & (df$Ctime - df$Ctime %% 120 == 0),]$step) # 20
mean(df[df$method=='VN' & (df$Ctime - df$Ctime %% 160 == 0),]$step) # 22.85
mean(df[df$method=='VN' & (df$Ctime - df$Ctime %% 200 == 0),]$step) # 25.71
【问题讨论】:
-
你试过annotate功能吗?