微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何通过将一列细分为多个区域来获取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线-这将仅对一组产生一个图

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。