ggplot中的变量hline与facet

时间:2016-10-31 20:38:59

标签: r ggplot2 facet

以Iris数据集为例,我可以生成一个带有facet的ggplot。 ggplot with facet 代码是:

library(ggplot2)
data(iris)
y=iris
y$Petal.Width.Range=factor(ifelse(y$Petal.Width<1.3,"Narrow","Wide"))
y$Petal.Length.Range=factor(ifelse(y$Petal.Length<4.35,"Short","Long"))
ggplot(y, aes(Sepal.Length,Sepal.Width)) + 
  geom_point(alpha=0.5)+
  geom_hline(yintercept =3 ,alpha=0.3)+
  facet_grid(Petal.Width.Range ~ Petal.Length.Range)

这里我在4个案例中都有一个3的横向规格。如果我想要一个依赖于案例的规范,我该怎么办?例如,我可以定义4个不同的规格如下:

y$threshold=2
y$threshold[(y$Petal.Width.Range=="Narrow")&(y$Petal.Length.Range=="Short")] =2
y$threshold[(y$Petal.Width.Range=="Narrow")&(y$Petal.Length.Range=="Long")] =2.5
y$threshold[(y$Petal.Width.Range=="Wide")&(y$Petal.Length.Range=="Short")] =3.1
y$threshold[(y$Petal.Width.Range=="Wide")&(y$Petal.Length.Range=="Long")] =4

我应该如何在ggplot命令中添加y $ threshold?

1 个答案:

答案 0 :(得分:4)

一个简单的解决方案就是将hline来电更改为geom_hline(aes(yintercept=threshold), alpha=0.3) +

问题是,在绘图上绘制150行(150是y data.frame中的行数)。也许这对你来说没问题,因为这些线条大多数都是叠在一起的,你真的只能在正确的位置看到四条线。

但是,这是我创建一个较小的辅助data.frame的另一个解决方案。这是ggplot2中的常用方法。请注意新的data.frame如何被指定为geom_hline调用中的数据源。

hline_dat = data.frame(Petal.Width.Range=c("Narrow", "Narrow", "Wide", "Wide"),
                       Petal.Length.Range=c("Short", "Long", "Short", "Long"),
                       threshold=c(2, 2.5, 3.1, 4))

p = ggplot(y, aes(Sepal.Length,Sepal.Width)) + 
    geom_point(alpha=0.5) +
    geom_hline(data=hline_dat, aes(yintercept=threshold), colour="salmon") +
    facet_grid(Petal.Width.Range ~ Petal.Length.Range)

ggsave("plot.png", plot=p, height=4, width=6)

https://facebook.github.io/react-native/docs/integration-with-existing-apps.html