在x轴上将geom_boxplot与double类型的变量一起使用

时间:2019-03-15 10:02:15

标签: r ggplot2

我的数据集如下所示:

df = tibble (
    gender = rep(c("fem","mal"),each=10),
    C = rep(rep(c(0,1), each=5),2),
    r = rep(c(0,1,2,3,4),4),
    value = rnorm(n = 20,mean = 5,sd = 1)
)

用以下命令绘制时出现问题:

df %>% ggplot() + geom_boxplot(aes(x=C,y=value,fill=gender))

由于框线图没有用变量C的值分隔,因此我推测是因为它的类型为double。实际上,如果我写aes(x=factor(C), ...),问题就会消失。

我问,是因为我想知道我是否可以在美学上将此变量保持为两倍,并且仍按其值将箱图分开。为了以后在自定义间隔中使用scale_x_continuous,此方法更加方便。

1 个答案:

答案 0 :(得分:1)

将一组添加到您的美学即可解决该问题。我添加了一个scale_x_continuous-调用以演示该方法的工作,并演示如何使用widthposition_dodge来操纵箱形图的宽度。

ggplot(df) +
  geom_boxplot(aes(x = C, y = value, fill = gender, group = interaction(gender, C)), 
               position = position_dodge(0.1), width = 0.1) + 
  scale_x_continuous(breaks = seq(0, 1, 0.2))

enter image description here

什么是interaction(gender, C)?为什么起作用? interaction通过将性别和C的值粘贴在一起来创建特殊因子变量。当以fill-美学的方式提供

时,我们可以看到它的工作原理:
ggplot(my.df) +
  geom_boxplot(aes(x = C, y = value, fill = interaction(gender, C)))

enter image description here

当它添加为group美学符号时,它会告诉ggplot您想要拥有哪些boxplot-group。