ggplot2. Как изменить цвет меток данных в зависимости от их фона (geom_segment)

Я создал хороший сюжет в стиле Лайкерта ниже. Я поместил метки на сегменты, чтобы повысить ясность. Однако я бы хотел, чтобы метки были белыми на темном фоне и черными на светлом фоне. Как я могу это сделать?

Сюжет в стиле Лайкерта

Я попытался установить дополнительный манекен с нулями для всех переменных, для которых я хотел бы иметь черные метки данных, и единицы для всех переменных, для которых я хотел бы иметь белые метки данных. Затем я добавил параметр color = dummy в geom_text_repel. Хотя метки имеют правильный цвет, сегменты меняют цвет с плохим результатом.

Другой (неправильный) Likert-style_plot

Мой код ниже:

color_palette = c("#525199", "#9393C6", "#A8A8A8","#FFA166", 
                  "#FF6200", "#FFFFFF", "#000000")

title <- "If you were to buy a car, would you choose...?"
subtitle <- "Subtitle"

# basic plot

p <- dane_3long %>% 
  ggplot() +
  geom_segment(aes(x = pytanie, y = start, xend = pytanie, 
                   yend = start + value, colour = variable), 
               size = 8) +
  scale_color_manual("", 
                     labels = c("1 - definitely no", "2", "3", "4", "5 - definitely yes"), 
                     values = ING_Likert_palette, guide = "legend") +
  coord_flip() +
  geom_hline(yintercept = 0, color =c("#A8A8A8"))

# Below I create labels 

p <- p + geom_text(aes(label = scales::percent(round((value), digits = 2)), 
                       colour = dummy, x = pytanie, y = (start + value)-value/2), 
                   size = 3, family = "ING Me") +
  theme_classic() +
  scale_y_continuous(breaks = seq(- 75, 75, 25), limits=c(- 0.73, 0.7))

# Below is styling of the plot

p <- p + labs(title = title, 
              subtitle = subtitle, 
              caption = "Źródło: Barometr finansowy ING", 
              y= " Percent", x= "") +
  theme(plot.title = element_text(face = "bold", size = 12),
        plot.subtitle = element_text(size = 9),
        plot.caption = element_text(size = 7, face = "italic"),
        legend.position = "right",
        legend.text = element_text(family = "ING Me",
                                   size = 8,
                                   color = grey(.3)),
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        axis.line = element_blank(),
        axis.ticks = element_blank(),
        axis.text.x = element_blank(),
        text = element_text(family = "ING Me",
                            size = 14,
                            color = grey(.3))); p

person Karol Pogorzelski    schedule 05.06.2018    source источник
comment
Добро пожаловать в Переполнение стека. Обычно вместе с вашим вопросом предоставляются примеры данных, чтобы сделать вашу проблему воспроизводимой. Пожалуйста, подумайте, Как сделать отличный воспроизводимый пример R, спасибо.   -  person jay.sf    schedule 05.06.2018
comment
@ Хенрик Спасибо за это. Проблема действительно аналогичная. Однако он рассматривает другой тип сюжета, и ответ не работает. Он использует параметр color_fill_manual для окрашивания меток данных. Однако я уже использовал этот параметр для других целей (раскрашивание сегментов). Так что я не могу использовать его снова (я верю). Должен быть другой путь...   -  person Karol Pogorzelski    schedule 05.06.2018
comment
Я экспериментировал с порядком цветов в переменной color_palette. Одна комбинация работает достаточно хорошо, а именно: ING_likert_palette = c(#FF6200, #FFA166, #A8A8A8, #9393C6, #525199, #FFFFFF, #000000). Однако я сделал это, экспериментируя, что не является надежным решением. Я хотел бы знать, как порядок цветов в палитре влияет на внешний вид диаграммы.   -  person Karol Pogorzelski    schedule 05.06.2018
comment
Если вы используете geom_rect вместо geom_segment, вы будете окрашивать столбцы с помощью аргумента заливки, а не цвета, тем самым освобождая scale_color_manual для установки цвета текста. Однако не могу дать более подробный ответ, пока вы не опубликуете образец своих данных.   -  person camille    schedule 05.06.2018
comment
@camille После рассмотрения я думаю, что ваше предложение - единственный выход. К сожалению, мне нужно будет полностью переделать код, чтобы изменить его с geom_segment на geom_rect... :-(   -  person Karol Pogorzelski    schedule 06.06.2018
comment
Разместите свои данные, и кто-нибудь может помочь вам с этим   -  person camille    schedule 06.06.2018