任何对此的帮助将不胜感激。
在ggplot2中,我使用geom_point()绘制了许多点,并用它绘制了2 geom_abline()。
第1行-> y = x(黑线)
第2行-> y = x + 3(橙色线)
我想从该图中提取位于1号线和2号线之间区域的点,并将其放置在单独的数据框中。
代码:
test<-read.csv("H:\\Analysis/XY_Data.csv")
test_graph<-ggplot(test)+aes(x=test$X, y=test$Y)+
geom_point(shape=4, colour="steelblue",size=3)+
geom_abline(size=1)+
geom_abline(intercept=3,size=1, colour="orange")+
labs(x="X", y="Y")+
scale_x_continuous(expand = c(0, 0), limits = c(0, 22))+
scale_y_continuous(expand = c(0, 0), limits = c(0, 25))+
theme_bw()
print(test_graph)
数据
+---------------------+
| X Y |
+---------------------+
| 0 0.13 |
| 0 0.131333333 |
| 0 0.233333333 |
| 0 0.013333333 |
| 0 0.010666667 |
| 0 0.01 |
| 0 0.014 |
| 0 0.088666667 |
| 0 0.034666667 |
| 0 0.038666667 |
| 0 0.090666667 |
| 0 0.022 |
| 0 0.228 |
| 0 0.074666667 |
| 0 0.288666667 |
| 0 0.224 |
| 0 0.006 |
| 0 0.026666667 |
| 0 0.149333333 |
| 0 0.090666667 |
| 0 0.112 |
| 0 0.197333333 |
| 0 0.138 |
| 0 0.388 |
| 0 0.980666667 |
| 0 0.906666667 |
| 0 0.006666667 |
| 0.25 0.680666667 |
| 0 0.056666667 |
| 0 0.039333333 |
| 0 0.028 |
| 0 0.014666667 |
| 0 0.062 |
| 0 0.032666667 |
| 1 1.982666667 |
| 1 0.893333333 |
| 0 0.011333333 |
| 0.75 0.85 |
| 0.25 2.046 |
| 0 0.012666667 |
| 0 0.931333333 |
| 0 0.560666667 |
| 0 1.078 |
| 0 0.638 |
| 0 1.402666667 |
| 0 0.058666667 |
| 0 0.764 |
| 0.5 1.266666667 |
| 0 0.162 |
| 0.25 1.268 |
| 0 0.170666667 |
| 0 0.030666667 |
| 0 0.009333333 |
| 0 0.2 |
| 0 0.334 |
| 0 0.028 |
| 0.25 0.374 |
| 0 0.010666667 |
| 0 0.092666667 |
| 0 1.436 |
| 0 0.236 |
| 1.25 1.077333333 |
| 0 0.458666667 |
| 0 0.186666667 |
| 0 0.092 |
| 0 0.429333333 |
| 0 0.064666667 |
| 0 0.028666667 |
| 0 0.01 |
| 0 0.036 |
| 0 0.015333333 |
| 0 0.319333333 |
| 0 0.013333333 |
| 0.25 1.345333333 |
| 0 0.011333333 |
| 0 0.018666667 |
| 0 0.869333333 |
| 0.25 0.508666667 |
| 0 0.843333333 |
| 0 0.01 |
| 0 0.04 |
| 0 0.012 |
| 0 0.054 |
| 0 0.066666667 |
| 0 0.009333333 |
| 0.25 2.333333333 |
| 0 0.176 |
| 0 0.034 |
| 0 0.012666667 |
| 0 0.034 |
| 0 0.019333333 |
| 0 0.617333333 |
| 0 0.006 |
| 0 0.042 |
| 0 0.099333333 |
| 0 0.024 |
| 0 0.006 |
| 0 0.028 |
| 0 0.01 |
| 0 0.064666667 |
| 0.25 1.092666667 |
| 0.5 0.691333333 |
| 0 0.373333333 |
| 0 0.024 |
| 0.25 0.268666667 |
| 0.25 0.510666667 |
| 0 0.032666667 |
| 0 0.015333333 |
| 0 0.011333333 |
| 0 0.136666667 |
| 0 0.076666667 |
| 0 0.342666667 |
| 0 0.089333333 |
| 0 0.042666667 |
| 0 0.068 |
| 0 0.020666667 |
| 0 0.538666667 |
| 0 0.088 |
| 0.25 0.028 |
| 0 0.065333333 |
| 0 0.474 |
| 0 0.091333333 |
| 0 2.816666667 |
| 0 0.014 |
| 0 0.030666667 |
| 0 2.243333333 |
| 0 0.006 |
| 0.75 0.126666667 |
| 0.25 0.048 |
| 5.5 0.738666667 |
| 0 0.025333333 |
| 0 0.039333333 |
| 0 0.163333333 |
| 0 0.325333333 |
| 0 0.040666667 |
| 0 0.018 |
| 0.75 2.746666667 |
| 0 0.026 |
| 0 0.018666667 |
| 0 0.068666667 |
| 0 0.008666667 |
| 0 21.53866667 |
| 0.25 0.028666667 |
| 2.5 0.616666667 |
| 0 0.052 |
| 0 0.054 |
| 0 0.060666667 |
+---------------------+
谢谢
答案 0 :(得分:3)
这是一个dplyr
解决方案。首先,我创建数据框。
df <- read.table(text = "0 0.13 |
0 0.131333333 |
0 0.233333333 |
0 0.013333333 |
0 0.010666667 |
0 0.01 |
0 0.014 |
0 0.088666667 |
0 0.034666667 |
0 0.038666667 |
0 0.090666667 |
0 0.022 |
0 0.228 |
0 0.074666667 |
0 0.288666667 |
0 0.224 |
0 0.006 |
0 0.026666667 |
0 0.149333333 |
0 0.090666667 |
0 0.112 |
0 0.197333333 |
0 0.138 |
0 0.388 |
0 0.980666667 |
0 0.906666667 |
0 0.006666667 |
0.25 0.680666667 |
0 0.056666667 |
0 0.039333333 |
0 0.028 |
0 0.014666667 |
0 0.062 |
0 0.032666667 |
1 1.982666667 |
1 0.893333333 |
0 0.011333333 |
0.75 0.85 |
0.25 2.046 |
0 0.012666667 |
0 0.931333333 |
0 0.560666667 |
0 1.078 |
0 0.638 |
0 1.402666667 |
0 0.058666667 |
0 0.764 |
0.5 1.266666667 |
0 0.162 |
0.25 1.268 |
0 0.170666667 |
0 0.030666667 |
0 0.009333333 |
0 0.2 |
0 0.334 |
0 0.028 |
0.25 0.374 |
0 0.010666667 |
0 0.092666667 |
0 1.436 |
0 0.236 |
1.25 1.077333333 |
0 0.458666667 |
0 0.186666667 |
0 0.092 |
0 0.429333333 |
0 0.064666667 |
0 0.028666667 |
0 0.01 |
0 0.036 |
0 0.015333333 |
0 0.319333333 |
0 0.013333333 |
0.25 1.345333333 |
0 0.011333333 |
0 0.018666667 |
0 0.869333333 |
0.25 0.508666667 |
0 0.843333333 |
0 0.01 |
0 0.04 |
0 0.012 |
0 0.054 |
0 0.066666667 |
0 0.009333333 |
0.25 2.333333333 |
0 0.176 |
0 0.034 |
0 0.012666667 |
0 0.034 |
0 0.019333333 |
0 0.617333333 |
0 0.006 |
0 0.042 |
0 0.099333333 |
0 0.024 |
0 0.006 |
0 0.028 |
0 0.01 |
0 0.064666667 |
0.25 1.092666667 |
0.5 0.691333333 |
0 0.373333333 |
0 0.024 |
0.25 0.268666667 |
0.25 0.510666667 |
0 0.032666667 |
0 0.015333333 |
0 0.011333333 |
0 0.136666667 |
0 0.076666667 |
0 0.342666667 |
0 0.089333333 |
0 0.042666667 |
0 0.068 |
0 0.020666667 |
0 0.538666667 |
0 0.088 |
0.25 0.028 |
0 0.065333333 |
0 0.474 |
0 0.091333333 |
0 2.816666667 |
0 0.014 |
0 0.030666667 |
0 2.243333333 |
0 0.006 |
0.75 0.126666667 |
0.25 0.048 |
5.5 0.738666667 |
0 0.025333333 |
0 0.039333333 |
0 0.163333333 |
0 0.325333333 |
0 0.040666667 |
0 0.018 |
0.75 2.746666667 |
0 0.026 |
0 0.018666667 |
0 0.068666667 |
0 0.008666667 |
0 21.53866667 |
0.25 0.028666667 |
2.5 0.616666667 |
0 0.052 |
0 0.054 |
0 0.060666667 |")[, 1:2]
然后,我将列X
和Y
命名。
names(df) <- c("X", "Y")
最后,我应用条件并将结果存储在新的数据框中。
df_filtered <- df %>%
filter(Y > X, Y < X + 3)
# X Y
# 1 0.00 0.130000000
# 2 0.00 0.131333333
# 3 0.00 0.233333333
# 4 0.00 0.013333333
# 5 0.00 0.010666667
# 6 0.00 0.010000000
# 7 0.00 0.014000000
# 8 0.00 0.088666667
# 9 0.00 0.034666667
# 10 0.00 0.038666667
# 11 0.00 0.090666667
# 12 0.00 0.022000000
# 13 0.00 0.228000000
# 14 0.00 0.074666667
# 15 0.00 0.288666667
# 16 0.00 0.224000000
# 17 0.00 0.006000000
# 18 0.00 0.026666667
# 19 0.00 0.149333333
# 20 0.00 0.090666667
# 21 0.00 0.112000000
# 22 0.00 0.197333333
# 23 0.00 0.138000000
# 24 0.00 0.388000000
# 25 0.00 0.980666667
# 26 0.00 0.906666667
# 27 0.00 0.006666667
# 28 0.25 0.680666667
# 29 0.00 0.056666667
# 30 0.00 0.039333333
# 31 0.00 0.028000000
# 32 0.00 0.014666667
# 33 0.00 0.062000000
# 34 0.00 0.032666667
# 35 1.00 1.982666667
# 36 0.00 0.011333333
# 37 0.75 0.850000000
# 38 0.25 2.046000000
# 39 0.00 0.012666667
# 40 0.00 0.931333333
# 41 0.00 0.560666667
# 42 0.00 1.078000000
# 43 0.00 0.638000000
# 44 0.00 1.402666667
# 45 0.00 0.058666667
# 46 0.00 0.764000000
# 47 0.50 1.266666667
# 48 0.00 0.162000000
# 49 0.25 1.268000000
# 50 0.00 0.170666667
# 51 0.00 0.030666667
# 52 0.00 0.009333333
# 53 0.00 0.200000000
# 54 0.00 0.334000000
# 55 0.00 0.028000000
# 56 0.25 0.374000000
# 57 0.00 0.010666667
# 58 0.00 0.092666667
# 59 0.00 1.436000000
# 60 0.00 0.236000000
# 61 0.00 0.458666667
# 62 0.00 0.186666667
# 63 0.00 0.092000000
# 64 0.00 0.429333333
# 65 0.00 0.064666667
# 66 0.00 0.028666667
# 67 0.00 0.010000000
# 68 0.00 0.036000000
# 69 0.00 0.015333333
# 70 0.00 0.319333333
# 71 0.00 0.013333333
# 72 0.25 1.345333333
# 73 0.00 0.011333333
# 74 0.00 0.018666667
# 75 0.00 0.869333333
# 76 0.25 0.508666667
# 77 0.00 0.843333333
# 78 0.00 0.010000000
# 79 0.00 0.040000000
# 80 0.00 0.012000000
# 81 0.00 0.054000000
# 82 0.00 0.066666667
# 83 0.00 0.009333333
# 84 0.25 2.333333333
# 85 0.00 0.176000000
# 86 0.00 0.034000000
# 87 0.00 0.012666667
# 88 0.00 0.034000000
# 89 0.00 0.019333333
# 90 0.00 0.617333333
# 91 0.00 0.006000000
# 92 0.00 0.042000000
# 93 0.00 0.099333333
# 94 0.00 0.024000000
# 95 0.00 0.006000000
# 96 0.00 0.028000000
# 97 0.00 0.010000000
# 98 0.00 0.064666667
# 99 0.25 1.092666667
# 100 0.50 0.691333333
# 101 0.00 0.373333333
# 102 0.00 0.024000000
# 103 0.25 0.268666667
# 104 0.25 0.510666667
# 105 0.00 0.032666667
# 106 0.00 0.015333333
# 107 0.00 0.011333333
# 108 0.00 0.136666667
# 109 0.00 0.076666667
# 110 0.00 0.342666667
# 111 0.00 0.089333333
# 112 0.00 0.042666667
# 113 0.00 0.068000000
# 114 0.00 0.020666667
# 115 0.00 0.538666667
# 116 0.00 0.088000000
# 117 0.00 0.065333333
# 118 0.00 0.474000000
# 119 0.00 0.091333333
# 120 0.00 2.816666667
# 121 0.00 0.014000000
# 122 0.00 0.030666667
# 123 0.00 2.243333333
# 124 0.00 0.006000000
# 125 0.00 0.025333333
# 126 0.00 0.039333333
# 127 0.00 0.163333333
# 128 0.00 0.325333333
# 129 0.00 0.040666667
# 130 0.00 0.018000000
# 131 0.75 2.746666667
# 132 0.00 0.026000000
# 133 0.00 0.018666667
# 134 0.00 0.068666667
# 135 0.00 0.008666667
# 136 0.00 0.052000000
# 137 0.00 0.054000000
# 138 0.00 0.060666667
下面,红色点在行内,黑色点在行内。
产生于,
g <- ggplot()
g <- g + geom_point(data = df %>% anti_join(df_filtered), aes(X, Y), colour = "black", size = 3)
g <- g + geom_point(data = df_filtered, aes(X, Y), colour = "#FF3300", size = 3)
g <- g + kitchendraw::theme_ocean() # From https://github.com/DanielReedOcean/kitchendraw
g <- g + geom_abline(intercept = 0, slope = 1, colour = "black")
g <- g + geom_abline(intercept = 3, slope = 1, colour = "orange")
g