如何创建具有大量连续x变量的geom_boxplot

19

我有一个数据框,其中包含多个类别的连续y轴数据和x轴数字间隔。最初,我通过将x轴间隔变为“因子”,并对融合后的数据绘制箱线图来创建了一个箱线图。可再现的数据:

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 <- 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))

生成的图表: 生成的图表

问题在于我不能使用x轴数字间隔,因为该轴被分类为因子,其具有相等的间距。我想能够使用诸如scale_x_continuous之类的东西来操作轴线中断和间距,例如将其调整为2的间隔而不是每1个数据绘制一个箱形图。但是,当我尝试使用x轴“as.numeric”绘制数据时,我只得到了所有数据的一个箱形图:

绘图

有没有什么建议可以在仍然能够控制x轴的数字属性的情况下获得这种连续外观的箱形图曲线(第一张图)?谢谢!


@Henrik,问题中的Google Drive链接对您无效吗?那应该是这个示例的数据框架。感谢您再次出现并帮助我!在R世界里,今天一直充满了问题... - AndMan21
@Henrik 抱歉,正在进行编辑。 - AndMan21
2个回答

31

这是一种使用您在Google上发布的原始数据的方法,实际上我认为这更加有帮助。

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)保留为数值,并在调用aes(...)时设置group=CH

然而,对于您的实际数据还有另一个问题。你的CH大约是以对数方式分布的,因此小于1的点和1-10之间的点数差不多。 ggplot希望使所有框的大小相同,因此在线性x轴上,框的宽度比线条宽度小,甚至看不到框。将x轴更改为对数比例可以解决这个问题。


0
不要将x作为一个因素。你需要美学地映射一个决定值与哪个框相关联的group,幸运的是,在融合后,这就是你的variable列:
ggplot(df.m, aes(x = x, y = value, group = variable)) +
    geom_boxplot()

由于x仍然是数字,您可以在特定的变量级别内为其赋予任何值,并且箱线图将显示在该位置。或者您可以转换x轴等。


问题在于:我主要是为了从拥有大量列的数据中获取数据,而将原始数据融合成一个列。实际上,我并不想按变量进行映射,而是想按x值进行映射。 - AndMan21
3
按照@BenBolker所说,将group=x设置为参数。 (很遗憾他删除了他的答案) - jlhoward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接