基于坐标的 ggplot2 图例位置

3
使用 ggplot2legend.position (和 legend.justification)这两个可用参数指示图例的相对位置,但如果我想根据绘图坐标来定位图例呢?我找不到方法。
这很奇怪,因为 annotate 提供了一个允许这样做的 x 和 y 参数。
以下是一些玩具数据。
library(ggplot2)

ggplot(data = mtcars, aes(x = mpg,y = disp,color = factor(cyl))) +
  geom_point() +
  theme(legend.position = c(0.01,0.01),
        legend.justification = c(0,0))

翻译结果:

这意味着:{{link1:this}}

如果我想要图例的左下角坐标为(10,100),怎么办?

1个回答

3
我认为没有简单的方法来做到这一点。我唯一能想到的方法是构建绘图对象以提取轴范围,从而将(10, 100)转换为相对坐标,可以与图例位置一起使用。不可否认,这非常笨拙...
library(tidyverse)

p <- ggplot(data = mtcars, aes(x = mpg, y = disp, color = factor(cyl))) +
  geom_point()

ranges <- ggplot_build(p) %>% 
  pluck("layout", "panel_params", 1) %>% 
  `[`(c("x.range", "y.range"))

x <- (10 - ranges$x.range[1]) / (ranges$x.range[2] - ranges$x.range[1])
y <- (100 - ranges$y.range[1]) / (ranges$y.range[2] - ranges$y.range[1])

p + theme(legend.position = c(x, y), legend.justification = c(0, 0))

reprex package (v1.0.0) 于2021-07-21创建


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接