Цвет управления geom_text_repel

Я хочу изменить цвет одной из моих меток ggrepel на черный. Я попытался переопределить наследование, указав ...geom_text_repel(...colour='black'), но это, похоже, не работает.

uempmed синий, но мне нужно, чтобы он соответствовал цвету черной линии

Моя попытка исправить проблему заключается во второй функции geom_text_repel (ниже).

Н.Б. Если есть способ управлять цветом отдельных элементов 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))

person Dom    schedule 03.04.2018    source источник


Ответы (1)


Сделайте то же самое, что и в слое 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))

Обратите внимание, что теперь для первой строки и текста теперь вручную устанавливается значение "black", поэтому автоматическое назначение переменной начнется со следующей строки (и текста). Если вы хотите вручную установить другой цвет, вы можете использовать ту же стратегию (установите его как аргумент для geom, а не как аргумент для aes).

введите описание изображения здесь

person De Novo    schedule 03.04.2018