改变颜色/线条样式时的R,ggplot:grid.Call.graphics中的错误

时间:2014-03-18 19:30:10

标签: r ggplot2

我有一些R代码来绘制情节。它看起来像下图:

enter image description here

现在我希望能够设置线条颜色和样式(需要灰色值),将两条直线添加到图例中并删除图例的标题。

此代码有效(我把假数据):

library(ggplot2)

load ("vns.data")
load ("rw.data")
load("gibbs.data")

如果您不加载数据,请执行以下操作:

vtm1<- c(1,3,4)
vmean<-c(3.9,3.8,3)
vmax<-c(4.1,4.2,4)
vmin<-c(3,2.5,2)
rtm1<- c(1,2,4,5)
rmean<-c(3.9,3.85,3.7,3.1)
rmax<-c(4.1,4.2,4,3.9)
rmin<-c(3,2.5,2,1.9)
gtm1<- c(2,4,5)
gmean<-c(4.1,3.9,3)
gmax<-c(4.1,4,3.9)
gmin<-c(3,2.5,1.5)
vns <- data.frame(vtm1, vmean, vmax, vmin)
gibbs <- data.frame(gtm1, gmean, gmax, gmin)
rw <- data.frame(rtm1, rmean, rmax, rmin)

然后继续

names(vns) <- c("tm1", "mean", "max", "min")
names(gibbs) <- c("tm1", "mean", "max", "min")
names(rw) <- c("tm1", "mean", "max", "min")
vns$what <- "VNS"
gibbs$what <- "GS"
rw$what <- "RW"


DF <- do.call(rbind, list(vns, gibbs, rw))




plt <- ggplot(DF, aes(x= tm1, ymin= min, ymax= max, y=mean)) +
xlab("Number of TM lookups") + 
ylab("Cross-entropy")+
geom_hline(yintercept=3.2240952381, linetype = "dotted", color="#A8A8A8")+ 
geom_hline(yintercept=3.44366666666667, linetype = "dotted") + 
geom_ribbon(aes(fill=what), alpha=0.3) +  
geom_line(aes(linetype = what))+
theme_bw( )+


 scale_colour_manual(name="what", values=c("vns"="#A8A8A8", "gibbs"="#E8E8E8", "rw"="#C8C8C8")) +  
    scale_fill_manual(name="what", values=c("vns"="#A8A8A8", "gibbs"="#E8E8E8", "rw"="#C8C8C8"))+
    scale_linetype_manual(name="what", values=c("vns"="solid", "gibbs"="dotdash", "rw"="dashed")) 
    print(plt)

当删除这些行时,此代码有效:

scale_colour_manual(name="what", values=c("vns"="#A8A8A8", "gibbs"="#E8E8E8", "rw"="#C8C8C8")) +  
scale_fill_manual(name="what", values=c("vns"="#A8A8A8", "gibbs"="#E8E8E8", "rw"="#C8C8C8"))+
scale_linetype_manual(name="what", values=c("vns"="solid", "gibbs"="dotdash", "rw"="dashed")) 

我的真实数据出现以下错误。使用玩具数据,它工作正常。

Error in grid.Call.graphics(L_lines, x$x, x$y, index, x$arrow) : 
  invalid line type

使用玩具数据,它可以正常工作。但是,需要将水平线添加到图例中,并删除图例名称。因此,我在此处提供了我的实际数据:https://dl.dropboxusercontent.com/u/13564139/vns.savedhttps://dl.dropboxusercontent.com/u/13564139/rw.saved以及https://dl.dropboxusercontent.com/u/13564139/gibbs.saved

知道什么可能导致这个错误,为什么只有真实数据,而不是玩具数据?我已经按照其他一些帖子中的建议重新启动了。

enter image description here

1 个答案:

答案 0 :(得分:5)

在您的玩具数据中,what列的值为"vns""gibbs""rw"。在您的真实数据中,它是"VNS""GS""RW"。您在scale_*调用中的映射适用于玩具数据,但实际数据失败,因为名称不同。你需要

scale_linetype_manual(name="what", values=c("VNS"="solid", "GS"="dotdash", "RW"="dashed")) 

Linetype是抛出错误的一种,因为颜色和填充都可以处理丢失的值(因为它没有映射到某些东西),但缺少的线型是错误。