R: Установка легенд и цветов в ggplot2 - PullRequest
0 голосов
/ 18 мая 2018

В R я пытаюсь построить график столбцов и линий / точек, используя ggplot2, но у меня трудности с легендами и настройками цвета.

Прежде всего, это мои фреймы данных.

vol_reshape <- data.frame(date = c("2018-01-01", "2018-02-01", "2018-03-01", "2018-04-01"),
                          variable = rep("total", 4),
                          value = as.integer(c("8029", "8164", "9536", "9482")))

qua_reshape <- data.frame(date = rep(c("2018-01-01", "2018-02-01", "2018-03-01", "2018-04-01"), 4),
                          variable = c(rep("quality_1", 4), rep("quality_2", 4), rep("quality_3", 4), rep("pod", 4)),
                          value = as.double(c("0.26", "0.26",   "0.30", "0.32", "0.27", "0.27", "0.30", "0.32", "0.45", "0.42", "0.51", "0.55", "0.05", "0.04", "0.05", "0.05")))

Я хочу построить гистограмму, используя vol_reshape, и на этой гистограмме я хочу построить точки и линии, используя qua_reshape.Вот мой вывод.

enter image description here

Вот мои проблемы:

  1. Легенды

Видимо, теперь у меня есть избыточные и странные легенды.То, что я хочу иметь, - это одна легенда, показывающая, что столбец - «Общая громкость», и другая легенда, показывающая, что каждая точка / линия обозначают «Détectée automatique», «Détectée autotique ou déclarée par le conducteur», «Détectée automatique, déclarée par le»conduteur ou par l'exploitant "," Rémontée POD ".

Цвета

Цвета этого сюжета действительно плохие.Я установил цветовые переменные cols так, чтобы полоса была синей, три линии / точки (quality_1 ~ 3) были черными, а pod линия / точка оранжевыми.Я установил эти значения в scale_fill_manual, но это не отражает мое желание.

Было бы здорово, если бы кто-нибудь помог мне решить эти проблемы.

Вот моя попытка.

    p <- ggplot(data = vol_reshape[which(vol_reshape$value > 0),], 
                aes(x = date, y = value, label = value, 
                    fill = variable
                    )
                ) +
      geom_bar(stat = "identity", position = "stack", show.legend = T) +   
      theme(legend.title=element_blank()) + 
      geom_text(size = size$label,  position = position_stack(vjust = 0.9), color = "#FFFFFF") +                        
      geom_point(data = qua_reshape, mapping = aes(x = date,
                                                   y = value *max(vol_reshape$value),
                                                   color = quality
                                                   )
                 ) +
      theme(legend.title=element_blank()) + 

      geom_line(data = qua_reshape, mapping = aes(x = date,
                                                  y =value*max(vol_reshape$value),
                                                  color = variable),
                size = size$line) +
      geom_text(data = qua_reshape, mapping = aes(x = date, 
                                                  y =value*max(vol_reshape$value), 
                                                  label =paste0(100*value, '%'),
                                                  color = variable),
                size = size$label, vjust = -0.9, hjust = 1.5
                ) +
      theme_classic() +

      scale_y_continuous(sec.axis = sec_axis(trans = ~.*(1/max(vol_reshape$value)))) +
      scale_fill_manual(name = NULL, values = cols, labels = labs, drop = T) +

      theme(legend.position = "right",
        plot.title = element_text(hjust = 0.5, size = size$title, family="Proxima Nova"),
        plot.subtitle = element_text(size = size$subtitle, family="Proxima Nova"),
        axis.title.x=element_blank(), 
        axis.text.x = element_text(angle = 45, margin=margin(t = 8), 
                                   family="Proxima Nova"))
        )

     cols <- c("total" = "#3D8BDA",  "quality_1" = "#000000", "quality_2" ="#000000",  "quality_3" = "#000000",  "pod" = "#ff8142")
     labs <- c("Total", "Détectée automatique", "Détectée automatique ou déclarée par le conducteur", "Détectée automatique, déclarée par le conducteur ou par l'exploitant", "Rémontée POD")

1 Ответ

0 голосов
/ 18 мая 2018

Можно попробовать

ggplot() + 
    geom_col(data=vol_reshape, aes(x=as.POSIXct(date), y=value, fill=factor("Total"))) + 
    geom_line(data=qua_reshape, aes(x=as.POSIXct(date), y=value2, group=variable, color=variable), size=1.5) + 
    scale_fill_manual(name="", values="skyblue1") + 
    scale_color_manual(values = c("orange", rep(1, 3))) 

enter image description here

...