Нет легенды в линейном графике ggplot - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать легенду для линейного графика, который я создал с помощью ggplot.Из того, что я читал, легенда должна создаваться автоматически, учитывая, что я изменил эстетику графика и включил тип линии в функцию aes, но она не видна.Я искал ответы на этот точный вопрос онлайн и перепробовал много подходов, но, похоже, ничего не работает.Я думаю, что мне не хватает чего-то совсем незначительного.Я попытался использовать scale_linetype_manual, но это не привело к созданию легенды.Любая помощь будет оценена.

    jpeg(filename = "careercurve.jpeg", width = 12, height = 10, units = "cm", res = 1200)
  ggplot() +
    scale_y_continuous(limits = c(0.5,0.8))+
   geom_line(aes(x = Age, y = fwd.preds), data = fwd.predictions, linetype = 1) +
    geom_line(aes(x = Age, y = def.preds), data = def.predictions, linetype = 2) +
    geom_line(aes(x = Age, y = mid.preds), data = mid.predictions, linetype = 3) +
    geom_line(aes(x = Age, y = ruck.preds), data = ruck.predictions, linetype = 4) +
    theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"), axis.text = element_text(colour = "black", size = 8), axis.title = element_text(size = 8), legend.position = "bottom")+
    labs(x = "Age (years)", y = "AFL Player Rank/min (au)") +
    geom_text(aes(x = 35.4, y = 0.535, label = "Fwd"), size = 3) +
    geom_text(aes(x = 35.4, y = 0.50, label = "Def"), size = 3) +
    geom_text(aes(x = 35.4, y = 0.575, label = "Mid"), size = 3) +
    geom_text(aes(x = 35.4, y = 0.67, label = "Ruck"), size = 3)
  dev.off()

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Это потому, что ваш тип линии не в скобках 'aes', а скорее серия констант.Я не знаю, как выглядят ваши наборы данных, но простейшим решением, вероятно, было бы создание столбца в каждом фрейме данных, который является именем набора данных.

Тогда у вас будет

geom_line(aes(x = Age, y = ..., linetype = df), data = ...) 

Однако, как я подозреваю, лучшее решение будет включать объединение данных в один кадр данных, даже если он находится только во временном кадре данных.

0 голосов
/ 24 октября 2018

Самый простой способ работы с ggplot2 - это если вы можете получить все свои данные в одном фрейме данных со столбцами для определения любых важных групп.Таким образом, в вашем случае вам необходимо дать всем столбцам fwd.preds в отдельных фреймах данных общее имя и добавить новый столбец для идентификации группы.Затем вы можете объединить их и построить график, например:

library(dplyr)

# Separate dfs
fwd_df = data.frame(
    Age = rpois(10, 20),
    fwd.preds = rnorm(10)
)
def_df = data.frame(
    Age = rpois(10, 20),
    def.preds = rnorm(10)
)

# Make all the column names the same, add
#   a position column
fwd_df = fwd_df %>%
    mutate(Position = "fwd") %>%
    rename(Pred = fwd.preds)
def_df = def_df %>%
    mutate(Position = "def") %>%
    rename(Pred = def.preds)
# Combine into single df
combined_df = bind_rows(fwd_df, def_df)

ggplot(combined_df, aes(x = Age, y = Pred, linetype = Position)) +
    geom_line()

Обратите внимание, что теперь мы можем просто включить столбец Position в aes(), и ggplot автоматически обрабатывает легенду и различные типы линий.

...