问题描述
我正在尝试通过将一列数据设置为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线-这将仅对一组产生一个图