首页 > 解决方案 > 无法使用 ggplot 正确设置箱线图

问题描述

我正在尝试使用 ggplot 设置箱线图。我在五天内进行了三个温度处理,并想创建一个箱线图,在其中我可以在 x 轴上看到这五天,每天有三个框,代表每个处理。这是输出图像的链接: https ://i.imgur.com/F61TfM5.png

通过使用 boxplot() 函数,我创建了一个几乎是我想要的图形,但我仍然想了解如何使用 ggplot 来完成它。

我正在使用的数据的 head() 是:

Tratamiento  Dias TotalLength
  <fct>       <dbl>       <dbl>
1 Control         1         261
2 Control         1         262
3 Control         1         366
4 Control         1         315
5 Control         1         351
6 Control         1         320

我将数据上传到https://pastebin.com/raw/ZQk8tfK5

向我展示了我想看到的箱线图的代码是:

library(RColorBrewer)
TLboxplot <- boxplot(TotalLength ~ Tratamiento + Dias, data= TLmeasure, 
    main = 'Total Length', 
    xlab = "Tratamiento x Dias", ylab = "TL",
    ylim = c(100,700),
    col= brewer.pal(n = 3, name = "Reds"))

我用于 ggplot 的代码不是我想要的:

library(ggplot2)
TLggplot <- ggplot(TLmeasure, aes(x=Tratamiento, y=TotalLength, 
fill=Tratamiento)) + 
  labs(title="Total Length", x="Temperatura x Dia", y="TL(µm)") +
  geom_boxplot() + 
  scale_fill_brewer(palette="Reds") +
  theme_classic() +
  theme(legend.position = "top")

ggplot 的实际结果是一个包含 3 个框的图表,每个处理在 x 轴上,而不是 5 天和每天 3 个框。我正在寻找的只是一张包含 15 个盒子的图表,每次治疗每天 3 个。这是使用 boxplot() 的正确箱线图图像的链接:https ://imgur.com/EwGD1ES.png

关于那里的 boxplot(),我认为温度应该嵌套到一天,以便它在一个刻度中显示三个框。我不确定我是否用这个声明让自己清楚......

这是我在这里的第一个问题。希望它足够详细。似乎我在处理图像时遇到了问题,但我认为 URL 应该可以工作。

编辑:谢谢你的回答,@r_alanb!它对我有用。

标签: rggplot2boxplot

解决方案


你很亲密。

您需要具有TratamientoasfillDias作为 的一个因素x

library(ggplot2)
library(RColorBrewer)

ggplot(TLmeasure, aes(as.factor(Dias), TotalLength, fill = Tratamiento)) +
  geom_boxplot() + 
  # the rest of your code
  labs(title="Total Length", x="Temperatura x Dia", y="TL(µm)") +
  geom_boxplot() + 
  scale_fill_brewer(palette="Reds") +
  theme_classic() +
  theme(legend.position = "top")

结果如下:

按温度组的时间与总长度的箱线图


推荐阅读