【问题标题】:Adding a label to a straight line in each facet of a facet wrapped ggplot在分面包装的ggplot的每个分面中为直线添加标签
【发布时间】:2019-10-15 20:29:04
【问题描述】:

我一直在努力编写最后一点代码,以使我正在制作的这张图表真正适合我和我的观众。我有一个带有两条线的条形图(一条用作滚动平均线,另一条用作滚动平均线的峰值)。我想要做的是用一个数字标记那个峰值线,一次,但在每个方面,每个方面的数字都不同。以下是一些精简的数据和代码:

tdf <- data.frame(a=as.POSIXct(c("2019-10-15 08:00:00","2019-10-15 09:00:00","2019-10-15 10:00:00","2019-10-15 08:00:00","2019-10-15 09:00:00","2019-10-15 10:00:00")),
                  b=as.Date(c("2019-09-02","2019-09-02","2019-09-02","2019-09-03","2019-09-03","2019-09-03")),
                  m1=c(0.2222222,0.3636364, 0.2307692, 0.4000000, 0.3428571, 0.3529412),
                  m2=c(0.2222222,0.2929293, 0.2972028, 0.3153846, 0.3714286, 0.3529412),
                  m3=c(0.2929293, 0.2929293, 0.2929293, 0.3529412,0.3529412,0.3529412))
 g <- ggplot(data = tdf, aes(x = a, y = m1)) +
  geom_bar(stat = "identity", alpha = 0.75, fill = 352) +
  xlab("time of day") +
  ylab("metric name") +
  ggtitle("Graph Title") +
  scale_x_datetime(breaks = scales::date_breaks("1 hours"), 
                   date_labels = "%H")+
  scale_y_continuous(breaks = c(0,.10,.20,.30,.40,.50,.50,.60,.70,.80,.90,1.0), 
                     labels = scales::percent) +
  theme_minimal()
# add line for m2
g <- g +
  geom_line(data = tdf, 
            aes(x = a, y = m2), 
            color = "blue", 
            size = 1.2)
# add line for m3
g <- g + geom_line(data=tdf, 
                   aes(x = a, y = m3), 
                   color = "#d95f02", 
                   size = 0.6, 
                   linetype = "dashed")
# last attempt to label the line results in an error: Invalid input: time_trans works with objects of class POSIXct
#g <- g+geom_text(aes(x=-Inf, y=Inf, label=median(tdf$m3)), size=2, hjust=-0.5, vjust= 1.4,inherit.aes=FALSE)
# facet wrap
g <- g + facet_wrap(~b, ncol = 5, scales = "fixed")

我见过一些技术,但似乎没有一个与在刻面中为 x 轴设置时间有关,并且每个刻面都有不同的日期。我有理由确定它与日期有关,但我有点不知道如何让文本块发生在每个方面。

【问题讨论】:

    标签: r ggplot2 posixct facet-wrap geom-text


    【解决方案1】:

    您只需将不同的数据集传递给仍保留分面变量的标签层。这将使用 dplyr

    g <- g + 
      geom_text(data = tdf %>% 
                  group_by(b) %>% 
                  summarize(median = median(m3)), 
                aes(x = as.POSIXct(-Inf, origin="1970-01-01"), 
                    y = Inf, 
                    label = median), 
                size = 2,
                hjust = -0.5,
                vjust = 1.4, 
                inherit.aes = FALSE)
    

    我们还必须将 x 显式转换为日期/时间值,轴才能工作。

    【讨论】:

    • 太棒了!我缺少的是将 x- 美学包装在 as.POSIXct 中并设置原点。我一直无法跟踪何时需要设置原点以及何时不需要。谢谢你。那行得通。
    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2021-10-11
    • 2020-05-25
    • 1970-01-01
    相关资源
    最近更新 更多