R ggplot - Несколько строк с одинаковой переменной цвета показывают легенды только первой строки - PullRequest
0 голосов
/ 16 января 2019

У меня есть данные (dt1) в следующем виде:

dt1 <- structure(list(date = structure(c(NA, 17179, 17180, 17181, 17182, 
17183, 17178, 17179, 17180, 17181, 17182, 17183), class = "Date"), 
    f = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L), y1 = c(68L, 
    43L, 99L, 53L, 12L, 20L, 29L, 49L, 68L, 15L, 71L, 88L), y2 = c(15L, 
    15L, 66L, 53L, 63L, 37L, 91L, 17L, 87L, 87L, 43L, 77L)), row.names = c(NA, 
-12L), class = "data.frame")

       date f y1 y2
1  12-01-17 0 68 15
2  13-01-17 0 43 15
3  14-01-17 0 99 66
4  15-01-17 0 53 53
5  16-01-17 0 12 63
6  17-01-17 0 20 37
7  12-01-17 1 29 91
8  13-01-17 1 49 17
9  14-01-17 1 68 87
10 15-01-17 1 15 87
11 16-01-17 1 71 43
12 17-01-17 1 88 77

Теперь я хочу построить многострочный график с датой на оси x и y1 и y2 на y, но представленные двумя разными линиями,Но у меня также есть переменная 'f', которую я хотел бы использовать в качестве цветовой переменной для обеих линий.Я пишу следующий код:

ggplot(data = dt1) +
geom_line(aes(x = date, y = y1, color = factor(f))) +
geom_line(aes(x = date, y = y2, color = factor(f)))

Но вместо 4 цветов я получаю 2 цвета для 4 строк, то есть 2 строки синим цветом и 2 строки красным, а также в легендах. У меня есть только легенды, относящиеся к y1.Я хочу получить 4 цвета для всех 4 линий и 4 элемента в окне легенды.

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вы получаете ожидаемое поведение - сначала нарисуйте линии для значений y1, где цвет зависит от коэффициента (0,1) для каждой строки, затем нарисуйте линии для значений y2, где цвет зависит от коэффициента (0,1) для каждого строки.

Сведение случая к первым двум записям, например: что требуется для назначения цветов y1 и y2, у которых значение f равно нулю? Хотите ли вы назначить цвет 0 для одного и цвет 1 для другого (в этом случае вам не нужна эта информация в каждом ряду) или вам нужна какая-то линия, которая будет чередовать цвет (поэтому здесь обе линии будут иметь цвет 0 для первых двух строк, тогда, если строка имеет коэффициент 1, обе строки будут иметь цвет 1)?

если вы хотите использовать один цвет для каждой строки, используйте жесткий код в параметре цвета вместо использования коэффициента строки

dt1 <- data.frame(x = c("01/01/19","01/02/19","01/03/19"), f = as.factor(c(1,1,0)), y1 = c(6,8,7), y2 = c(10,12,14))
dt1$x <- as.Date(dt1$x, "%m/%d/%y")

ggplot(data = dt1) +
  geom_line(aes(x = x, y = y2, color = "red"))  + 
               geom_line(aes(x = x, y = y1, color = "blue"))

если вы хотите чередовать цвета на y1 и y2, это то, как это может выглядеть при использовании точек (линии кажутся более хитрыми)

dt1 <- data.frame(x = c("01/01/19","01/02/19","01/03/19"), f = as.factor(c(1,1,0)), y1 = c(6,8,7), y2 = c(10,12,14))
dt1$x <- as.Date(dt1$x, "%m/%d/%y")

ggplot(data = dt1) +
  geom_point(aes(x = x, y = y2, color = factor(f)))  + 
  geom_point(aes(x = x, y = y1, color = factor(f))) 
0 голосов
/ 16 января 2019

Вы можете получить 4 цвета, пересекая переменную f с переменной - если значение происходит из столбца y1 или y2:

dt1 %>%
  gather(key, value, y1:y2) %>%
  unite('f', f:key, sep = '_') %>%
  ggplot(aes(
    x = date,
    y = value,
    color = f
  )) +
  geom_line()

enter image description here

0 голосов
/ 16 января 2019

Не следует использовать четыре цвета для двух групп. Вместо этого используйте два цвета и два типа линий:

x <- c("y1" = "solid", "y2" = "dashed")

ggplot(data = dt1) +
  geom_line(aes(x = date, y = y1, color = factor(f), linetype = "y1")) +
  geom_line(aes(x = date, y = y2, color = factor(f), linetype = "y2")) +
  scale_linetype_manual(values = x)

enter image description here

...