我尝试通过将一列中的数据子集化为x,然后使用另一列来表示y值,从而创建箱图。
Spot Vol Spot_Tot_Int Spot_Max_Int Spot_Background Spot_Int/Bkg Spot_IntMax/Bkg Spot_Int-Bkg Spot_Z_Pos Spot_X_Pos Spot_Y_Pos
1 47 14757 488 47.58763 310.1016 10.254766 12520.38 4 27 79
2 46 13197 409 46.24423 285.3761 8.844346 11069.77 4 49 936
3 47 17838 573 66.40580 268.6211 8.628765 14716.93 4 63 844
4 38 12484 527 57.01034 218.9778 9.243938 10317.61 4 125 942
5 45 15113 604 43.97189 343.6969 13.736049 13134.27 4 134 891
6 40 13684 578 52.34335 261.4277 11.042473 11590.27 4 204 434
我尝试使用Spot_Z_Pos作为X,但将其分解为3个范围(1-10,11-20,21-30),而不是为每个单独的值1-30绘制一个曲线图。我希望y值为Spot_IntMax/Bkg。我可以在basic R中通过创建子集的三个单独的数据框来实现这一点,但在ggplot中,类似的方法对我没有帮助。
谢谢你的帮助!!
发布于 2020-11-07 00:13:37
您好,您可以为组创建一个新的变量,然后根据该变量对图进行分面。条形图类似于此(您可以更改为geom图层中的箱形图):
library(dplyr)
library(ggplot2)
df %>%
dplyr::mutate(GROUP = case_when(Spot_Z_Pos < 11 ~ 1,
Spot_Z_Pos < 21 ~ 2,
Spot_Z_Pos < 31 ~ 3,
TRUE ~ 4)) %>%
ggplot2::ggplot(aes(Spot_Z_Pos, `Spot_IntMax/Bkg`)) +
ggplot2::geom_col() +
ggplot2::facet_wrap( ~ GROUP)
请注意,我为不小于31的所有内容创建了组4,以防在该列中出现意外情况。还要注意的是,有更紧凑的函数可以切成组……我个人更喜欢case_when,如果垃圾桶的数量很少的话
还可以在构建图之前过滤特定组并省略facet_wrap行-这将导致一个组只有一个图
https://stackoverflow.com/questions/64717935
复制相似问题