How to remove lines from legends in ggplot?

孤街醉人 提交于 2019-12-11 06:57:40

问题


I've read a few posts about this, but didn't find the right solution for my problem. Because the dashed line from geom_vline is vertical, it's also shown that way in the legend. On top of that, the short-dashed lines also get a vertical partner which is really not necessary. Is it possible to get only horizontal lines for both the colours and the types? It would make the legend much clearer.

As my code is based on a large dataset, I made a simple short variant to show here.

# data (example)

meetdagen1 <- as.Date(c("2016-06-01", "2016-06-28", "2016-07-17", "2016-08-03", "2016-08-30", "2016-09-10"))
maxtemp    <- c(20, 22, 28, 24, 23, 22)
meantemp   <- maxtemp - 2
mintemp    <- meantemp - 2

meetdagen2 <- c(meetdagen1, as.Date(c("2016-09-29", "2016-10-12", "2016-11-01")))
maxtemp2   <- c(maxtemp, 20, 17, 19)
meantemp2  <- maxtemp2 - 2
mintemp2   <- meantemp2 - 2

# dataframes for ggplot

df  <- data.frame(meetdagen1, meantemp, mintemp, maxtemp)
df2 <- data.frame(meetdagen2, meantemp2, mintemp2, maxtemp2)

# plot

ggplot() +
  xlab("Time (months)") + 
  ylab("Daily temperature (°C)") +
  scale_x_date(date_labels = "%b %d", date_breaks = "1 month") + 
  geom_line(data = df, aes(x = meetdagen1, y = maxtemp, colour = "max.temp"), size = 0.75) +
  geom_line(data = df, aes(x = meetdagen1, y = meantemp, colour = "gem.temp"), size = 0.75) +
  geom_line(data = df, aes(x = meetdagen1, y = mintemp, colour = "min.temp"), size = 0.75) +
  geom_line(data = df2, aes(x = meetdagen2, y = maxtemp2, colour = "max.temp", lty = "prediction"), size = 0.75) +
  geom_line(data = df2, aes(x = meetdagen2, y = meantemp2, colour = "gem.temp", lty = "prediction"), size = 0.75) +
  geom_line(data = df2, aes(x = meetdagen2, y = mintemp2, colour = "min.temp", lty = "prediction"), size = 0.75) +
  geom_vline(aes(xintercept = as.numeric(Sys.Date()), lty = "today"), size = 0.75) +
  scale_colour_manual("", values = c(max.temp = "firebrick2", gem.temp = "grey20", min.temp = "royalblue3")) +
  scale_linetype_manual("", values = c(prediction = 3, today = 5)) #+
  #guides(colour = guide_legend(override.aes = list(linetype = 0))) +
  #guides(lintype = guide_legend(override.aes = list(colour = NA)))

The bottom two lines are a solution I found in a similar question. But they hide either all linetypes or all colours, which isn't useful.

Any ideas?

(I would insert images, but I have no idea on which website I can put them...)


回答1:


If you add show.legend = FALSE to the call to geom_vline it will not include the vertical line, which should give you what you want.



来源:https://stackoverflow.com/questions/40264320/how-to-remove-lines-from-legends-in-ggplot

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!