如何使用大量连续的x变量创建geom_boxplot

时间:2014-11-20 22:26:35

标签: r ggplot2 boxplot

我有一个数据框,其中包含多个类别的x轴数字分箱和连续的y轴数据。最初,我创建了一个箱形图,通过制作x轴箱子和#34;因素",并做了融化数据的箱线图。可重复的数据:

x <- seq(1,10,by=1)
y1 <- rnorm(10, mean=3)
y2 <- rnorm(10, mean=10)
y3<- rnorm(10, mean=1)
y4<- rnorm(10, mean=8)
y5<- rnorm(10, mean=12)
df <- data.frame(x,y1,y2,y3,y4,y5)
df.m <- melt(df, id="x")

我的代码将x轴数据创建为一个因素:

  

df.m $ x&lt; - as.factor(df.m $ x)

我的ggplot:

ggplot(df.m, aes(x=x, y=value))+
 geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.1)+
 theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

结果情节: The resulting plot

问题在于我不能使用x轴数字间距,因为x轴被分类为具有相等间距的因子。我希望能够使用像scale_x_continuous这样的东西来操纵轴断裂和间距,例如,间隔为2,而不是每1个盒子图,但是当我尝试用x轴绘制数据时#34; as.numeric&#34;,我只得到所有数据的一个箱线图:

plot

有什么方法可以获得这种连续观察的箱线图曲线(第一张图像),同时仍能控制x轴的数字属性?谢谢!

2 个答案:

答案 0 :(得分:22)

以下是使用您在Google上发布的原始数据的一种方法 - 实际上这对IMO更有帮助。

ggplot(df, aes(x=CH, y=value,group=CH))+
  geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.2)+
  scale_x_log10()

所以,正如@BenBolker在删除答案(??)之前说的那样,你应该把x变量(CH)保留为数字,并在调用{{1}时设置group=CH }}。

根据您的真实数据,还有另一个问题。你的aes(...)或多或少是对数间隔的,所以大约有多少个点&lt; 1,因为有1到10之间,等等CH想要使盒子的大小相同,所以使用线性x轴,盒子宽度小于线宽,你不要看到盒子。将x轴更改为对数刻度可以或多或少地修复。

答案 1 :(得分:0)

不要让x成为一个因素。您需要在美学上映射group,这是决定与该值相关联的框的因素,幸运的是,在融化后,这就是您variable列的内容:

ggplot(df.m, aes(x = x, y = value, group = variable)) +
    geom_boxplot()

由于x仍为数字,因此您可以在特定variable级别内为其提供所需的任何值,并且框图将显示在该位置。或者您可以转换x轴等