geom_text_repel 的控制颜色

Dom*_*Dom 5 r ggplot2 aesthetics ggrepel

我想将其中一个ggrepel标签的颜色更改为黑色。我试图通过指定来覆盖继承,...geom_text_repel(...colour='black')但这似乎不起作用。

uempmed 是蓝色的,但我需要它来匹配黑线颜色

我试图解决这个问题是在第二个geom_text_repel函数(下面)中。

NB 如果有一种方法可以控制单个geom_text_repel元素的颜色,而不必两次调用该函数,我更愿意这样做。

library("tidyverse")
library("ggthemes")
library("ggrepel")

df1 <- gather(economics, variable_name, observation, -date) %>% 
  rename(period = date) %>% 
  filter(variable_name == 'psavert')

df2 <- gather(economics, variable_name, observation, -date) %>% 
  rename(period = date) %>% 
  filter(variable_name == 'uempmed')

ggplot(df1, aes(x = period, y = observation, colour = variable_name)) +
  geom_line() +
  geom_line(data = df2, colour = 'black', size = .8) +
  geom_text_repel(
    data = subset(df1, period == max(as.Date(period, "%Y-%m-%d"))),
    aes(label = variable_name),
    size = 3,
    nudge_x = 45,
    segment.color = 'grey80'
  ) +
  geom_text_repel(
    data = subset(df2, period == max(as.Date(period, "%Y-%m-%d"))),
    aes(label = variable_name, colour = 'black'), #How do I set the colour of the label text to black?
    size = 3,
    nudge_x = 45,
    segment.color = 'grey80'
  ) +
  scale_y_continuous(labels = scales::comma) +
  theme_minimal(base_size = 16) +
  scale_color_tableau() + 
  scale_fill_tableau() +
  theme(legend.position = 'none') +
  labs(x="", y="", title = "Economic Data") + 
  scale_x_date(limits = c(min(df1$period), max(df1$period) + 1200))
Run Code Online (Sandbox Code Playgroud)

De *_*ica 6

做与您在geom_line()图层中所做的相同的事情。您想设置颜色,而不是映射。做colour = 'black'一个参数geom_text_repel(),而不是aes()

ggplot(df1, aes(x = period, y = observation, colour = variable_name)) +
  geom_line() +
  geom_line(data = df2, colour = 'black', size = .8) + # just like this layer
  geom_text_repel(
    data = subset(df1, period == max(as.Date(period, "%Y-%m-%d"))),
    aes(label = variable_name),
    size = 3,
    nudge_x = 45,
    segment.color = 'grey80'
  ) +
  geom_text_repel(
    data = subset(df2, period == max(as.Date(period, "%Y-%m-%d"))),
    aes(label = variable_name) # don't assign it here, 
    size = 3,
    nudge_x = 45,
    segment.color = 'grey80',
    colour = "black" # assign it here
  ) +
  scale_y_continuous(labels = scales::comma) +
  theme_minimal(base_size = 16) +
  scale_color_tableau() + 
  scale_fill_tableau() +
  theme(legend.position = 'none') +
  labs(x="", y="", title = "Economic Data") + 
  scale_x_date(limits = c(min(df1$period), max(df1$period) + 1200))
Run Code Online (Sandbox Code Playgroud)

请注意,现在第一行 AND 文本现在都手动设置为"black",因此自动变量分配将从下一行(和文本)开始。如果您想手动将其设置为不同的颜色,您可以使用相同的策略(将其设置为 的参数geom,而不是aes

在此处输入图片说明