标记绘图区域外的行尾

label end of lines outside of plot area

我正在尝试从金融时报复制这个数字。

这是一个 gist 的数据。我正在努力标记行的结尾,因为我 运行 在情节中没有空间。我找到了一些方法来扩展绘图区域的限制,但这并不理想,因为网格线也会扩展。

library(tidyverse)
library(ggrepel)

covid %>%                                    
ggplot(aes(x = date, y = deaths_roll7_100k, color = Province_State)) +
  geom_line() +
  scale_y_continuous(breaks = seq(0, 2.4, .2)) +
  scale_x_date(breaks = seq.Date(from=as.Date('2020-09-01'),
                                 to=as.Date('2021-07-12'),
                                 by="month"),
               labels = function(x) if_else(month(x) == 9 | month(x) == 1, 
                                          paste(month(x, label = TRUE), 
                                                "\n", year(x)), 
                                          paste(month(x, label = TRUE))),
               limits = as.Date(c("2020-09-01", "2021-11-01"))) +
  geom_text_repel(aes(label = label),
                  segment.alpha = 0,
                  hjust = 0,
                  direction="y",
                  na.rm = TRUE,
                  xlim = as.Date(c("2021-08-01", "2021-11-01")))

ggrepel 的替代方法是使用 geom_text 并关闭“剪辑”(类似于 ),例如

covid %>%                                    
  ggplot(aes(x = date, y = deaths_roll7_100k, color = Province_State)) +
  geom_line() +
  scale_y_continuous(breaks = seq(0, 2.4, .2)) +
  scale_x_date(breaks = seq.Date(from=as.Date('2020-09-01'),
                                 to=as.Date('2021-07-12'),
                                 by="month"),
               date_labels = "%b\n%Y",
               limits = as.Date(c("2020-09-01", "2021-07-01"))) +
  geom_text(data = . %>% filter(date == max(date)),
            aes(color = Province_State, x = as.Date(Inf),
                y = deaths_roll7_100k),
            hjust = 0, size = 4, vjust = 0.7,
            label = c("Arizona\n", "North Carolina")) +
  coord_cartesian(expand = FALSE, clip = "off")

--

通过一些更多的调整和 Financial-Times/ftplottools R 主题,您可以使情节看起来与金融时报的人物非常相似,例如

library(tidyverse)
#remotes::install_github("Financial-Times/ftplottools")
library(ftplottools)
library(extrafont)
#font_import()
#fonts()

covid %>%
  ggplot() +
  geom_line(aes(x = date, y = deaths_roll7_100k,
                group = Province_State, color = Province_State)) +
  geom_text(data = . %>% filter(date == max(date)),
            aes(color = Province_State, x = as.Date(Inf),
                y = deaths_roll7_100k),
            hjust = 0, size = 4, vjust = 0.7,
            label = c("Arizona\n", "North Carolina")) +
  coord_cartesian(expand = FALSE, clip = "off") +
  ft_theme(base_family = "Arimo for Powerline") +
  theme(plot.margin = unit(c(1,6,1,1), "lines"),
        legend.position = "none",
        plot.background = element_rect(fill = "#FFF1E6"),
        axis.title = element_blank(),
        panel.grid.major.x = element_line(colour = "gray75"),
        plot.caption = element_text(size = 8, color = "gray50")) +
  scale_color_manual(values = c("#E85D8C", "#0D5696")) +
  scale_x_date(breaks = seq.Date(from = as.Date('2020-09-01'),
                                 to = as.Date('2021-07-01'),
                                 by = "1 month"),
               limits = as.Date(c("2020-09-01", "2021-07-01")),
               date_labels = "%b\n%Y") +
  scale_y_continuous(breaks = seq(from = 0, to = 2.4, by = 0.2)) +
  labs(title = "New deaths attributed to Covid-19 in North Carolina and Arizona",
       subtitle = "Seven-day rolling average of new deaths (per 100k)\n",
       caption = "Source: Analysis of data from John Hopkins SSE\nUpdated: 12th July 2021 | CCBY4.0")