При использовании установки порядка уровней факторов вручную я не могу заставить geom_point и geom_line отображать данные в одном порядке.

df <- data.frame(A=c(rep(c(5, 10, 15, 20, 25), 2)),
                 B=c(81, 86, 89, 94, 99, 81, 86, 89, 94, 100),
                 C=c(rep(0, 5), rep(1, 5)))
df$C <- factor(df$C, levels=c(1,0))

colors=c("red", "black")

ggplot(df, aes(A, B)) +
    geom_point(aes(color=C)) +
    geom_line(aes(color=C)) +
    scale_color_manual(values=colors)

enter image description here

Я хочу, чтобы нули от C были нанесены последними, что делает geom_line, а geom_point - нет. Не понимаю почему. Как я могу заставить их обоих сотрудничать? Если я не устанавливаю уровни фактора df $ C и вместо этого использую dplyr ::range (desc (C)), это все равно не устраняет несоответствие.

Я использую свою цветовую палитру, но даже при использовании цветов по умолчанию у меня возникает эта проблема.

Спасибо!

0
hmg 23 Окт 2018 в 20:36

2 ответа

Лучший ответ

Добавьте эту строку в свою подготовку фрейма данных, чтобы отсортировать фрейм данных по C, чтобы 0 появлялись последними и рисовались последними (т. Е. Сверху) по geom_point.

df <- df[order(df$C),]

enter image description here

2
Jon Spring 23 Окт 2018 в 17:53

Вы можете изменить входящие цвета

library(tidyverse)

colors=c("black", "red")

data.frame(A = c(rep(c(5, 10, 15, 20, 25), 2)),
           B = c(81, 86, 89, 94, 99, 81, 86, 89, 94, 100),
           C = c(rep(0, 5), rep(1, 5))) %>% 
  mutate(C = factor(C)) %>% 
  arrange(C) %>% 
ggplot(aes(A, B, color=C)) +
  geom_point() +
  geom_line() +
  scale_color_manual(values=colors) + 
  guides(color = guide_legend(reverse=TRUE))

enter image description here

-1
B Williams 23 Окт 2018 в 18:06
52954846