我有一个包含72个离散类别的data.frame。当我按照这些类别着色时,我会在图例中获得72个不同的键。我宁愿只使用每一个第二或第三个键。
知道如何减少图例中的线条数量吗?
由于 小时。
下面给出了重现我的问题的代码。
t=seq(0,2*pi,length.out=10)
RR=rep(cos(t),72)+0.1*rnorm(720)
dim(RR)=c(10,72)
stuff=data.frame(alt,RR)
names(stuff)=c("altitude",
paste(rep(15:20,each=12),
rep(c("00","05",as.character(seq(from=10,to=55,by=5))),6),
sep=":"))
bb=melt(stuff,id.vars=c(1))
names(bb)[2:3]=c("period","velocity")
ggplot(data=bb,aes(altitude,velocity))+geom_point(aes(color=period))+geom_smooth()
答案 0 :(得分:3)
您可以将period
值视为geom_point()
中的数字。这将使颜色成为渐变(从1到72的值对应于级别数)。然后使用scale_colour_gradient()
,您可以设置所需的中断次数,并将标签添加为实际的期间值。
ggplot(data=bb,aes(altitude,velocity))+
geom_point(aes(color=as.numeric(period)))+
geom_smooth()+
scale_colour_gradient("Period",low="red", high="blue",
breaks=c(seq(1,72,12),72),labels=unique(bb$period)[c(seq(1,72,12),72)])
答案 1 :(得分:1)
现在很难为discrete_color_scale定制图例!所以我提出了一个点阵解决方案。您只需要将正确的文本提供给auto.key列表。
libarry(latticeExtra)
labels.time <- unique(bb$period)[rep(c(F,F,T),each=3)] ## recycling here to get third label
g <- xyplot(velocity~altitude, data=bb,groups=period,
auto.key=list(text=as.character(labels.time),
columns=length(labels.time)/3),
par.settings = ggplot2like(), axis = axis.grid,
panel = function(x,y,...){
panel.xyplot(x,y,...)
panel.smoother(x,y,...)
})