我是ggplot2的新手,无法在等高线图上添加带有直接标签的标签。 我想用geom_point和stat_contour绘制一个图。点图和等高线图分别具有不同的数据。我想用直接标签在轮廓上添加标签。
使用以下脚本,我得到的图表没有直接标签,但是直接标签会返回以下错误。错误:stat_contour需要以下缺少的aethtics:x,y,z
library(ggplot2)
library(directlabels)
library(akima)
dat<- NULL
dat$x<- c(-1.0, 0.0, 1.0)
dat$y<- c(-0.5, 0.0, 0.5)
dat$z<- matrix(c(0.2,0.2,0.2,0.2,0.3,0.4,0.3,0.4,0.4),ncol=3)
dat0<-cbind( expand.grid(dat$x,dat$y),c(dat$z))
colnames(dat0) <- c("x", "y", "z")
dat0<-data.frame(dat0)
nDivX <- 6
nDivY <- 6
z.cubic <- with(dat, bicubic.grid(x=x,y=y,z=z, xlim=c(min(x),max(x)),ylim=c(min(y),max(y)),dx=(max(x)-min(x))/nDivX,dy=(max(y)-min(y))/nDivY) )
z.cubic<-cbind( expand.grid(z.cubic$x,z.cubic$y),c(z.cubic$z))
colnames(z.cubic) <- c("x", "y", "z")
z.cubic<-data.frame(z.cubic)
p0 <- ggplot(NULL)
p1 <- geom_point(data=dat0, aes(x=x,y=y) )
p <- p0 +p1 + stat_contour(data=z.cubic, aes(x=x, y=y, z=z , colour=..level..))
#without directlabels
dev.new()
print(p)
#with directlabels
dev.new()
direct.label(p)
给出两个不同的数据帧可能会造成麻烦,但我想提供单独的数据,因为我的工作中的轮廓数据与点图相比相对较大。
感谢您的帮助!
答案 0 :(得分:0)
我不是百分百肯定,但似乎问题在于direct.label
如何处理您的第一次ggplot(NULL)
电话。很可能它看起来是为了所需的美学,但却无法找到它们。
以下是解决这个问题的方法:
pp0 <- ggplot(dat0, aes(x=x, y=y, z=z)) + geom_point()
pp <- pp0 + stat_contour(data=z.cubic, aes(x=x, y=y, z=z, colour=..level..))
现在print(pp)
和direct.label(pp)
都按预期工作。
浏览源代码时,我找到了一种方法来解决问题,方法是在direct.label.ggplot
dlgeom$mapping <- c(dlgeom$mapping, L$mapping)
中的最后一行之前添加以下行。
Toby Hocking(软件包维护者)回答了我的消息,事实证明,该软件包确实已在R-Forge上更新为版本directlabels_2014.6.13
,@ user3357659正确指出了该版本。事实上,我在这里提出的作为过期版本directlabels_2013.6.15
的解决方法的想法已经在那里实施。
答案 1 :(得分:0)
将您的直接标签升级到R-Forge版本
install.packages("directlabels", repos="http://r-forge.r-project.org")