r) x数值范围固定的方框图

r) x数值范围固定的方框图,r,function,boxplot,numerical,R,Function,Boxplot,Numerical,我想做一个箱线图,将数字x(“年龄”)固定在范围内。例如,我希望每个框的x范围为“1-5”、“5-10”、“10-13”、“13-20”、“>20”,并用一条线连接框的中值。如果可能的话,我还想通过“季节”(不同框架中每个季节的一系列方框)的函数来制作这样的箱线图。我的数据如下 season age value1 value2 wet.summer 14.193 16.786 22.66 fall 3.944 6.432 10.272 fall 9.994 16

我想做一个箱线图,将数字x(“年龄”)固定在范围内。例如,我希望每个框的x范围为“1-5”、“5-10”、“10-13”、“13-20”、“>20”,并用一条线连接框的中值。如果可能的话,我还想通过“季节”(不同框架中每个季节的一系列方框)的函数来制作这样的箱线图。我的数据如下

season  age value1  value2
wet.summer  14.193  16.786  22.66
fall    3.944   6.432   10.272
fall    9.994   16.111  22.737
fall    3.101   6.507   14.372
winter  2.631   NA  13.889
winter  20.746  22.629  29.27
winter  15.93   21.356  36.454
winter  7.384   7.419   11.851
spring  22.955  25.793  42.038
spring  10.876  16.532  24.188
spring  25.724  27.272  50.447
early.summer    10.825  16.452  23.147
下面是我用来制作另一种箱线图的内容。我试图将其修改为我想要的,但失败了。非常感谢您的帮助!!!:)


p这里有一种方法。我使用
gather()
转换了您的数据。然后,我使用
cut()
创建了一个组变量,如您在问题中所述。示例数据中没有足够的数据点,但我尝试创建一个您提到的图形。希望这就是你想要的

library(dplyr)
library(tidyr)
library(ggplot2)

gather(mydf, whatever, value, -(season:age)) %>%
mutate(group = cut(age, breaks = c(1, 5, 10, 13, 20, Inf),
       labels = c("1-5", "5-10", "10-13", "13-20", "20 +"))) -> mydf2


ggplot(data = mydf2, aes(x = group, y = value, fill = group)) +
geom_boxplot() +
stat_summary(fun.y = median,  geom = "line", aes(group = 1)) +
facet_wrap(~ season)

多美的情节啊!谢谢你的帮助。但我不确定方框的y值代表什么;哪一个是值1、值2或组合?我想画一次代表一个变量的方框。你能提供更多的信息或修改吗?我一直在搜索r中的“聚集”功能。但是,很难理解“聚集(mydf,whatever,value,-(季节:age))%>%”,尤其是“whatever”、“value”、“%>%”的含义。无论“key”是什么,value都应该是一个变量。@user2928318
%%>%%
是一个来自
magrittr
包的运算符
dplyr
使用此运算符。至于
gather
,我建议您查看
gather的结果(mydf,无论如何,value,-(季节:年龄))
。看到结果会让你明白发生了什么。基本上,值1和值2保留在一列中,即
value
。另一列指示它是哪个值
无论什么
都是包含值信息的列(值1或值2)。希望这能给你一个更好的画面。非常感谢你的帮助!我了解您的代码,并可以为我的目的申请。:)@用户2928318我很高兴听到您现在可以将代码应用到您自己的案例中。我很高兴能够帮助您。祝你好运
library(dplyr)
library(tidyr)
library(ggplot2)

gather(mydf, whatever, value, -(season:age)) %>%
mutate(group = cut(age, breaks = c(1, 5, 10, 13, 20, Inf),
       labels = c("1-5", "5-10", "10-13", "13-20", "20 +"))) -> mydf2


ggplot(data = mydf2, aes(x = group, y = value, fill = group)) +
geom_boxplot() +
stat_summary(fun.y = median,  geom = "line", aes(group = 1)) +
facet_wrap(~ season)