如何通过将一列细分为多个区域来获取X值,从而在ggplot2中创建箱线图?

问题描述

我正在尝试通过将一列数据设置为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。我可以通过创建子集的三个单独的数据帧来弄清楚如何在基本R中做到这一点,但是类似的方法并不能帮助ggplot。

感谢您的帮助!

解决方法

您好,您可以为该组创建一个新变量,然后以此来刻画该图。对于条形图,可能会与此类似(您可以在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 _

您还可以在构建图之前过滤特定组,并忽略facet_wrap线-这将仅对一组产生一个图