добавить простую легенду на ggplot с типом линии - PullRequest
0 голосов
/ 31 марта 2020

Как мне добавить легенду к этому ggplot? Я искал везде, но не мог найти простой способ, который соответствует моему текущему коду. У меня три переменные, все они одного цвета с разными типами линий.

ggplot()+geom_line(data=datapop, aes(Year, OECD),size = 0.7, color="#69b3a2") +
    geom_line(data=datapop, aes(Year, World),size = 0.7, color="#69b3a2", linetype="dashed")+
    geom_line(data=datapop, aes(Year, Switzerland),size = 0.7, color="#69b3a2", linetype="twodash")+
    xlab("Years")+ ylab("Aging") +theme_minimal()+ labs(color="Legend text")+
    scale_x_date(date_breaks = "2 years",date_labels = "%Y")+
    theme(axis.text.x=element_text(angle=60, hjust=1))

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Другим подходом было бы решение data.table. Естественно, сначала вы должны установить и загрузить пакет data.table.

install.packages("data.table")
library(data.table)

Я создал эти фиктивные данные для вашей ситуации, преобразовал тип символа «Год» в формат даты и преобразовал целые данные в data.table:

datapop <- data.frame(Year = c("1980", "1982", "1984"), OECD = c(2,3,4), World = c(3,5,8), Switzerland = c(2,2.5,3)) %>% mutate(Year = as.Date(Year, format = "%Y")) %>% as.data.table()

Я соединил эти столбцы 'OECD', 'World' и 'Switzerland' в один столбец 'variable' data.table 's melt() с использованием столбца «Год» в качестве столбца идентификатора:

datapop_melted <- melt(datapop, id.vars = "Year")

Затем я просто построил эти данные, используя пакет ggplot2. В разделе aes() я привел аргумент linetype = variable, чтобы он сам создавал легенду в соответствии с типами линий:

ggplot(data=datapop_melted) +
      geom_line(aes(x = Year, y = value, linetype = variable)) + 
      labs(title="Years vs Aging", x ="Years", y = "Aging", linetype = "Location") +
      scale_x_date(date_breaks = "2 years", date_labels = "%Y") +
      theme(axis.text.x=element_text(angle=60, hjust=1)) +
      theme_minimal()

Результирующий график можно увидеть в ссылке .

0 голосов
/ 31 марта 2020

ОБНОВЛЕНИЕ

Вот решение с mtcars.

data("mtcars")

ggplot( data = mtcars) +
  geom_line(aes(gear, mpg, linetype = "mpg"), color = "royalblue", size = 0.7 ) + 
  geom_line(aes(gear, drat, linetype = "drat" ), color = "royalblue", size = 0.7 ) + 
  geom_line(aes(gear, qsec, linetype = "qsec" ), color = "royalblue",  size = 0.7 )+ 
  xlab("gear") + ylab("Outcomes") + 
  scale_linetype_manual( name = "Legend text", 
                         values = c( "mpg" = "solid",
                                     "drat" = "dashed",
                                     "qsec" = "twodash" ) ) +
  theme_minimal() + 
  theme(axis.text.x=element_text(angle=60, hjust=1))

Для вашего примера я бы сделал следующее. Чтобы настроить linetype, вы должны использовать scale_linetype_manual(). Аргумент name предназначен для заголовка легенды, тогда как values управляет типом линии, вызывая имена, которые вы использовали в оригинале aes() в geom_line().

ggplot( data = datapop)+
  geom_line(aes(Year, OECD, linetype = "OECD" ), color = "royalblue", size = 0.7 ) + 
  geom_line(aes(Year, World, linetype = "World" ), color = "royalblue", size = 0.7 ) + 
  geom_line(aes(Year, Switzerland, linetype = "Switzerland" ), color = "royalblue", size = 0.7 ) + 
  xlab("Year") + ylab("Aging") + 
  scale_color_manual( name = "Legend text",
                      values = c( "OECD" = "solid",
                                  "World" = "dashed",
                                  "Switzerland" = "twodash" ) ) +
  theme_minimal() + 
  theme(axis.text.x=element_text(angle=60, hjust=1))

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

Теперь выглядит лучше?

...