ggplot2中的相同图例中的不同传奇按键 [英] Different legend-keys inside same legend in ggplot2

查看:247
本文介绍了ggplot2中的相同图例中的不同传奇按键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我不需要一个'正确'的变量映射,但仍然希望有图例键来帮助理解图表。我的实际数据与以下类似:df

  df < -  data.frame(id = 1:10,line = rnorm (10),points = rnorm(10))

library(ggplot2)

ggplot(df)+
geom_line(aes(id,line,color = line))+
geom_point(aes(id,points,color =points))



基本上,我希望相对于 points 的图例键只是一个点,没有中间的线。我接近这一点:

  library(reshape2)

df < - melt( df,id.vars =id)

ggplot()+
geom_point(aes(id,value,shape = variable),df [df $ variable ==points, ])+
geom_line(aes(id,value,color = variable),df [df $ variable ==line,])

,但它定义了两个独立的图例。修复第二个代码(并重新设计我的数据)也可以,但我更喜欢用一种方法(如果有的话)手动更改任何图例键(并继续使用第一个代码)。谢谢!



编辑:

感谢@alexwhan您刷新了我关于变量映射的记忆。然而,到目前为止,最简单的方法仍然是以下(非常糟糕的黑客!):

  df < - data.frame(id = 1:10,line = rnorm(10),points = rnorm(10))

ggplot(df)+
geom_line(aes(id,line,color =line))+
geom_point(aes(id,points,shape =points))+
theme(legend.title = element_blank())

这只是隐藏了两个不同图例的标题。




其他想法超过欢迎!!!

解决方案

您可以使用 override.aes = guides()函数内改变图例的默认外观。在这种情况下,您的指南是 color = ,然后您应该设置 shape = c(NA,16)用于行,然后 linetype = c(1,0)从点删除行。

  ggplot(df)+ 
geom_line(aes(id,line,color =line))+
geom_point(aes(id,points,color =points))+
guides(color = guide_legend(override.aes = list(shape = c(NA,16),linetype = c(1,0))))


Let's say I don't need a 'proper' variable mapping but still would like to have legend keys to help the chart understanding. My actual data are similar to the following df

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

library(ggplot2)

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))

Basically, I would like the legend key relative to points to be.. just a point, without the line in the middle. I got close to that with this:

library(reshape2)

df <- melt(df, id.vars="id")

ggplot() +
  geom_point(aes(id, value, shape = variable), df[df$variable=="points",]) +
  geom_line(aes(id, value, colour = variable), df[df$variable=="line",])

but it defines two separate legends. Fixing the second code (and having to reshape my data) would be fine too, but I'd prefer a way (if any) to manually change any legend key (and keep using the first approch). Thanks!

EDIT :

thanks @alexwhan you refreshed my memory about variable mapping. However, the easiest way I've got so far is still the following (very bad hack!):

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, shape = "points")) +
  theme(legend.title=element_blank())

which is just hiding the title of the two different legends.

Other ideas more than welcome!!!

解决方案

You can use override.aes= inside guides() function to change default appearance of legend. In this case your guide is color= and then you should set shape=c(NA,16) to remove shape for line and then linetype=c(1,0) to remove line from point.

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))+
  guides(color=guide_legend(override.aes=list(shape=c(NA,16),linetype=c(1,0))))

这篇关于ggplot2中的相同图例中的不同传奇按键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆