我是ggplot2
的新手并且对R来说相对较新。我可以在图上显示图片,我可以使y轴反向缩放,但我不知道如何在一旦。例如:
library(ggplot2)
y=c(1,2,3)
x=c(0,0,0)
d=data.frame(x=x, y=y)
#following http://stackoverflow.com/questions/9917049/inserting-an-image-to-ggplot2/9917684#9917684
library(png)
library(grid)
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
g <- rasterGrob(img, interpolate=TRUE)
#these work fine - either reversing scale, or adding custom annotation
ggplot(d, aes(x, y)) + geom_point()
ggplot(d, aes(x, y)) + geom_point() + scale_y_reverse()
ggplot(d, aes(x, y)) + geom_point() + annotation_custom(g, xmin=.23, xmax=.27, ymin=1.8, ymax=2.2)
#these don't...combining both reverse scale and custom annotation
ggplot(d, aes(x, y)) + geom_point() + annotation_custom(g, xmin=.23, xmax=.27, ymin=1.8, ymax=2.2) + scale_y_reverse()
ggplot(d, aes(x, y)) + geom_point() + annotation_custom(g, xmin=.23, xmax=.27, ymin=2.2, ymax=1.8) + scale_y_reverse()
我确定我遗漏了一些非常基本的东西。我应该从哪里开始寻找能够在反向比例图上显示我的小图形,以及在引擎盖下更好地理解事物?
澄清回应评论: 上面的例子是我试图简化我遇到的问题。我不知道它是否重要,但我不只是试图在静态图像上叠加一些数据。实际上,我想根据绘图中的数据将图像放在绘图上的某个位置。但是,当轴刻度反转时,我似乎无法做到这一点。而且,事实证明,当缩放比例时,我甚至无法将图像置于绝对位置,这就是我发布的代码示例。
答案 0 :(得分:4)
使用scale_y_reverse
,您需要将annotation_custom
内的y坐标设置为负数。
library(ggplot2)
y=c(1,2,3)
x=c(0,0,0)
d=data.frame(x=x, y=y)
library(png)
library(grid)
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
g <- rasterGrob(img, interpolate=TRUE)
ggplot(d, aes(x, y)) + geom_point() +
annotation_custom(g, xmin=.20, xmax=.30, ymin=-2.2, ymax=-1.7) +
scale_y_reverse()
为何负面? y坐标是原始的负数。看看这个:
(p = ggplot(d, aes(x=x, y=y)) + geom_point() + scale_y_reverse())
y.axis.limits = ggplot_build(p)$layout$panel_params[[1]][["y.range"]]
y.axis.limits
或者,在rasterGrob
内以相对单位设置grob的坐标和大小。
g <- rasterGrob(img, x = .75, y = .5, height = .1, width = .2, interpolate=TRUE)
ggplot(d, aes(x, y)) + geom_point() +
annotation_custom(g) +
scale_y_reverse()