替代geom_linerange和facets

时间:2017-05-12 21:02:40

标签: r ggplot2

我想使用ggplot实现这样的图形:

enter image description here

我能得到的最接近的是:

ggplot(dat, aes(x = Date, color = Rain)) + 
geom_linerange(aes(ymin = 0, ymax = 1)) +
facet_wrap(~Station, ncol = 1)

给出:

enter image description here

我可以整理所有格式细节。我的问题是:我可以在y轴上使用Station而不是像原始的facet变量那样实现这一点吗?

我不认为geom_linerange是正确的方法。我尝试将Station作为y美学,但这不起作用。我可以使用另一个geom吗?

2 个答案:

答案 0 :(得分:3)

正如我上面评论的那样,我认为geom_raster将是您最好的选择。让我们编写一些数据,看看它是如何工作的。

library(ggplot)
dat <- data.frame(Date    = c(1:5, 1:5), 
                  Station = c(rep("A", 5), rep("B", 5)), 
                  Rain    = c(0,0,1,1,0, NA,1,0,1,1))

一个简单的情节就是,

ggplot(dat, aes(Date, Station)) + 
  geom_raster(aes(fill = factor(Rain)))

plot1

现在,使用geom_raster优于geom_tile的优势在于您可以使用hjustvjust来控制切片的对齐方式。这个值从0变为1,默认值为0.5,让我们尝试将这些值替换为零

ggplot(dat, aes(Date, Station)) + 
  geom_raster(aes(fill = factor(Rain)),
              hjust = 0,
              vjust = 0)

enter image description here

我认为默认选项工作正常,我希望这会有所帮助。 干杯!

答案 1 :(得分:1)

怎么样

ggplot(dat, aes(x = Date, color = Rain)) + 
    geom_linerange(aes(ymin = 0, ymax = 1)) +
    facet_wrap(Station ~ .)

使用facet_wrap代替facet_grid将标签放在轴上,而不是通过将标签放在单个图表的顶部来使整个网格混乱。