在ggplot中,我想使用自定义注释来设置位图(如本文末尾的位图)作为绘图的背景。其他要点是
如果不改变y尺度,事情似乎很简单。这有效(例如建议here):
require(ggplot2) ## packages png and grid are also needed.
myurl <- "http://i.stack.imgur.com/pbmsi.png"
tmp <- tempfile()
download.file(myurl,tmp,mode="wb")
bg <- png::readPNG(tmp)
file.remove(tmp) # cleanup
ysize <- dim(bg)[1]
xsize <- dim(bg)[2]
bg <- grid::rasterGrob(bg)
D <- data.frame(x=seq(10, (xsize-10), length.out=10),
y=seq(10, (ysize-10), length.out=10))
## upright y scale
p <- ggplot(data=D, aes(x=x, y=y)) + geom_blank()
p <- p + annotation_custom(bg,
xmin=0, ymin=0,
xmax=xsize, ymax=ysize)
p <- p + coord_equal()
p <- p + scale_x_continuous(limits=c(0,xsize),
expand=c(0,0))
p <- p + scale_y_continuous(limits=c(0, ysize),
expand=c(0,0))
p <- p + geom_point(size=5, color="blue", alpha=.6)
p
问题在于我找到一个能够获得相反规模的解决方案时遇到了麻烦:我能得到的最接近的是以下,这绝对不是我期望的。注意annotation_custom()中的双反转y标度和负ymin。我尝试了很多变化,似乎无法想出更合理的东西。
# reversed y
p <- ggplot(data=D, aes(x=x, y=y)) + geom_blank()
p <- p + annotation_custom(bg,
xmin=0, ymin=-ysize,
xmax=xsize, ymax=0)
p <- p + coord_equal()
p <- p + scale_x_continuous(limits=c(0,xsize),
expand=c(0,0))
p <- p + scale_y_continuous(limits=c(0, ysize),
expand=c(0,0),
trans="reverse")
p <- p + scale_y_reverse(expand=c(0,0))
p <- p + geom_point(size=5, color="blue", alpha=.6)
p
还要注意y比例的范围似乎是关闭的(至少相对于之前的情节稍微减少)。
我是否过多地询问ggplot,或者只是做了一些愚蠢的事情?有什么建议吗?
答案 0 :(得分:1)
所以这是解决方案(感谢aosmith):
require(ggplot2) ## packages png and grid are also needed.
myurl <- "http://i.stack.imgur.com/pbmsi.png"
tmp <- tempfile()
download.file(myurl,tmp,mode="wb")
bg <- png::readPNG(tmp)
file.remove(tmp) # cleanup
ysize <- dim(bg)[1]
xsize <- dim(bg)[2]
bg <- grid::rasterGrob(bg)
D <- data.frame(x=seq(10, (xsize-10), length.out=10),
y=seq(10, (ysize-10), length.out=10))
# reversed y
p <- ggplot(data=D, aes(x=x, y=y)) + geom_blank()
p <- p + annotation_custom(bg,
xmin=0, ymin=-ysize,
xmax=xsize, ymax=0)
p <- p + coord_equal()
p <- p + scale_x_continuous(limits=c(0,xsize),
expand=c(0,0))
p <- p + scale_y_continuous(limits=c(0, ysize),
expand=c(0,0),
trans="reverse")
p <- p + geom_point(size=5, color="blue", alpha=.6)
p
结果如下:
似乎我应该能够找到自己,但是,你知道....