0

我想订购我的 y 轴值,这样做我的误差条不再适合 y 轴。代码如下,如果我刚跑ggplot下来,我会在正确的位置看到错误栏,如果我运行它,所有Kale_Nutrientsggplot错误栏都会在 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)

在不重新排序 x 轴的情况下运行

在对 x 轴重新排序后运行,误差条在 y 轴上移位

4

3 回答 3

0

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

geom_errorbar(aes(ymin=P-P.s.e , ymax=P+P.s.e))+
于 2021-09-27T08:21:20.543 回答
0

Miff 回答如下,并且有效。

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

geom_errorbar(aes(ymin=PP.se, ymax=P+Pse))+

于 2021-09-27T08:45:07.537 回答
0

我认为问题是基于对管道机制的误解/误用:

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

此外,由于这些列与您的点数据存在于相同的数据框中,因此无需在错误栏的美学中指定数据框名称。

我相信以下内容将通过解决您看到的问题和您没有看到的问题来满足您的需求,但如果您进行了更多的修改而不是重新排序因素,则会出现以下问题:

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)
于 2021-09-27T09:01:39.427 回答