如何为构面添加不同的线

Posted

技术标签:

【中文标题】如何为构面添加不同的线【英文标题】:How to add different lines for facets 【发布时间】:2012-08-04 11:41:52 【问题描述】:

我有数据可以查看两种不同物种的单一栽培和混合栽培之间的生长差异。此外,我制作了一个图表以使我的数据清晰。

我想要一个带有误差线的条形图,整个数据集当然更大,但对于这个图表,这是带有条形图手段的data.frame

plant           species     means
Mixed culture   Elytrigia   0.886625
Monoculture     Elytrigia   1.022667
Monoculture     Festuca     0.314375
Mixed culture   Festuca     0.078125

利用这些数据,我在ggplot2 中制作了一个图表,其中plant 在x 轴上,means 在y 轴上,我使用了一个方面来划分物种。

这是我的代码:

    limits <- aes(ymax = meansS$means + eS$se, ymin=meansS$means - eS$se)
    dodge <- position_dodge(width=0.9)

    myplot <- ggplot(data=meansS, aes(x=plant, y=means, fill=plant)) + facet_grid(. ~ species) 
    myplot <- myplot + geom_bar(position=dodge) + geom_errorbar(limits, position=dodge, width=0.25)
    myplot <- myplot + scale_fill_manual(values=c("#6495ED","#FF7F50"))
    myplot <- myplot + labs(x = "Plant treatment", y = "Shoot biomass (gr)")  
    myplot <- myplot + opts(title="Plant competition")
    myplot <- myplot + opts(legend.position = "none")
    myplot <- myplot + opts(panel.grid.minor=theme_blank(), panel.grid.major=theme_blank())

到目前为止还不错。但是,我想在两个方面添加两条不同的水平线。为此,我使用了以下代码:

    hline.data <- data.frame(z = c(0.511,0.157), species = c("Elytrigia","Festuca")) 
    myplot <- myplot + geom_hline(aes(yintercept = z), hline.data)

但是,如果我这样做,我会得到一个情节,如果有两个额外的方面,则绘制两条水平线。相反,我希望将水平线绘制在带有条形的刻面中,而不是制作两个新刻面。任何人都知道如何解决这个问题。

我认为如果我把我现在创建的图表放在上面会更清楚:

【问题讨论】:

abline 是你要找的吗? 不,我只想要一条水平线,在给定的 y 坐标处。然而,每个刻面的值都不同,例如刻面 Elytrigia 的水平线位于 0.511,刻面 Festuca 的水平线位于 0.157。 我建议您完全按照控制台的原样剪切和粘贴您的数据集,或者使用dput(means) 向我们提供您的数据。 【参考方案1】:

确保两个数据集中的变量物种相同。如果它是其中一个因素,那么它也一定是另一个因素

library(ggplot2)
dummy1 <- expand.grid(X = factor(c("A", "B")), Y = rnorm(10))
dummy1$D <- rnorm(nrow(dummy1))
dummy2 <- data.frame(X = c("A", "B"), Z = c(1, 0))
ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) + 
    geom_hline(data = dummy2, aes(yintercept = Z))

dummy2$X <- factor(dummy2$X)
ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) + 
    geom_hline(data = dummy2, aes(yintercept = Z))

【讨论】:

哦,对了,现在我想起来我的物种名称后面有一个空格,真烦人。至少我的代码没有问题 似乎不适用于geom_abline,还是我搞砸了?看我的问题***.com/questions/43696806/… 您需要在geom_line中指定data = dummy2。否则你会得到错误Error: mapping must be created by aes()

以上是关于如何为构面添加不同的线的主要内容,如果未能解决你的问题,请参考以下文章

如何为不同的弹性 beanstalk 环境添加不同的 option_settings?

如何为不同的xib添加一个共同的视图?

如何为uiview的不同部分添加多个UITapGestureRecognizer?

MAVEN:多模块项目,如何为构建添加不同的环境

如何为 DOM 中的每个元素添加不同的文本

如何为不同类型的用户制作出价表结构