Как добавить легенду на многострочном графике в R? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь построить два разных набора данных на одном графике. Я использую этот код, чтобы добавить линии и на самом деле построить все

ggplot()+
geom_point(data=Acc, aes(x=Year, y=Accumulo), color="lightskyblue")+
geom_line(data=Acc, aes(x=Year, y=RM3), color="gold1")+
geom_line(data=Acc, aes(x=Year, y=RM5), color="springgreen3")+
geom_line(data=Acc, aes(x=Year, y=RM50), color="blue")+
geom_line(data=Vulcani, aes(x=Year, y=Accumulo.V), color="red")+
theme_bw()+
scale_x_continuous(expand=expand_scale(0)) + scale_y_continuous(limits=c(50,350),expand=expand_scale(0))

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

1 Ответ

1 голос
/ 21 января 2020

Вам лучше создать отдельный набор данных, приспособленный к вашим потребностям графика, который будет в длинном формате, так что вы можете дать одну инструкцию geom_line() и добавить цвета в строки с aes(color = ...) в пределах позвоните на geom_line(). Вот пример с набором данных midwest (для примера рассмотрим их как отдельные наборы данных)

library(ggplot2)
library(dplyr)
library(tidyr)

long_midwest <- midwest %>% 
    select(popwhite, popasian, PID, poptotal) %>% 
    gather(key = "variable", value = "value", -PID, -poptotal) # convert to long format

long_midwest2 <- midwest %>% 
    select(poptotal, perchsd, PID) %>% 
    gather(key = "variable", value = "value", -PID, -poptotal)

plot_data <- bind_rows(long_midwest, long_midwest2) %>% # bind datasets vertically
    mutate(line_type = ifelse(variable == 'perchsd', 'A', 'B')) # creates a line_type variable

ggplot(data = plot_data, aes(x=poptotal, y = value))+
    geom_line(aes(color = variable, linetype = line_type)) +
    scale_color_manual(
        values = c('lightskyblue', 'gold1', 'blue'),
        name = "My color legend"
    ) +
    scale_linetype_manual(
        values = c(3, 1), # play with the numbers to get the correct styling
        name = "My linetype legend"
    )

enter image description here

Я добавил line_type переменная для отображения наиболее общего c случая, когда вы хотите указать c отображение между значениями столбца и типом строки. Если это то же самое, что, скажем, variable, просто используйте aes(color = variable, linetype = variable). Затем вы можете решить, какой тип линии вы хотите ( см. Здесь для получения более подробной информации ).

Для настройки меток просто измените содержимое variable в наборе данных на нужные значения.

...