重新排列 X 轴的顺序导致误差线不再与 y 轴匹配

Rearranging order of X axis causes errorbars to no longer match up on y axis

我想订购我的 y 轴值,这样做时我的误差线不再适合 y 轴。代码在下面,如果我 运行 只是 ggplot 向下,我在正确的位置得到错误栏,如果我 运行 它全部从 ggplot 中删除 Kale_Nutrients误差线在 Y 轴上发生位移。

Kale_Nutrients %>%
  arrange(X) %>%
  mutate(X = factor(X, levels=c( "Control", "B1 <2mm 5%", "B1 <2mm 10%", 
            "B1 <2mm 20%", "B1 >2mm 5%", "B1 >2mm 10%", 
            "B1 >2mm 20%", "B2 <2mm 5%", "B2 <2mm 10%","B2 <2mm 20%", "B2 >2mm 5%", "B2 >2mm 10%", "B2 >2mm 20%", "B3 <2mm 5%", "B3 <2mm 10%", "B3 <2mm 20%", "B3 >2mm 5%", "B3 >2mm 10%", "B3 >2mm 20%"))) %>%
ggplot(Kale_Nutrients,aes(X, P))+
geom_point()+
theme_classic()+
theme(axis.text.x=element_text(angle=90, size=12, color="black"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(),axis.line = element_line(colour = "black"),axis.text.y=element_text( size=14, color="black"),axis.title=element_text(size=14, face="bold"))+
geom_errorbar(ymin=Kale_Nutrients$P-Kale_Nutrients$P.s.e , ymax=Kale_Nutrients$P+Kale_Nutrients$P.s.e)+
ylim(0,4000)

Running without reordering the x axis

Running after reordering the x axis with the errorbars displaced on the y axis

您需要从具有重新排序的因子水平的数据集中提取误差条的值,而不是原始的 Kale_Nutrients 数据框。这会将错误栏的代码更改为:

geom_errorbar(aes(ymin=P-P.s.e , ymax=P+P.s.e))+

Miff 回答如下并且有效。

您需要从具有重新排序的因子水平的数据集中提取误差条的值,而不是原始的 Kale_Nutrients 数据框。这会将错误栏的代码更改为:

geom_errorbar(aes(ymin=P-P.s.e , ymax=P+P.s.e))+

我认为问题是基于 misunderstanding/misuse 的管道机制:

通过指定 ggplot(Kale_Nutrients, ...),您告诉 ggplot 使用原始数据框,而不是您通过管道传输给它的重新排序的数据框(管道创建一个新对象,除非明确指定,否则它们不会修改原始对象).在这种情况下,它没有任何区别,因为您没有对点值应用过滤器或修改,但在另一种情况下,它可能会导致您绘制 wrong/old 个点值。

此外,由于列与您的点数据存在于同一数据框中,因此无需在误差条的美学中指定数据框名称。

我相信以下内容将满足您的需要,通过修复您看到的问题和您没有看到但如果您进行更多修改而不是重新排序该因素会遇到的问题:

Kale_Nutrients %>%
  arrange(X) %>%
  mutate(X = factor(X, levels=c( "Control", "B1 <2mm 5%", "B1 <2mm 10%", 
            "B1 <2mm 20%", "B1 >2mm 5%", "B1 >2mm 10%", 
            "B1 >2mm 20%", "B2 <2mm 5%", "B2 <2mm 10%","B2 <2mm 20%", "B2 >2mm 5%", "B2 >2mm 10%", "B2 >2mm 20%", "B3 <2mm 5%", "B3 <2mm 10%", "B3 <2mm 20%", "B3 >2mm 5%", "B3 >2mm 10%", "B3 >2mm 20%"))) %>%
ggplot(aes(X, P))+
geom_point()+
theme_classic()+
theme(axis.text.x=element_text(angle=90, size=12, color="black"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(),axis.line = element_line(colour = "black"),axis.text.y=element_text( size=14, color="black"),axis.title=element_text(size=14, face="bold"))+
geom_errorbar(ymin=P-P.s.e , ymax=P+P.s.e)+
ylim(0,4000)