如何在ggplot2中将文本标签巧妙地放置在不同大小的点旁边?

里亚姆

我正在尝试ggplot2在R中使用标记的气泡图。这是简化的场景:

我有4个变量的数据帧:3定量变量,xy,和z,而另一个标签的点的变量,lab

我要绘制一个散点图,其位置由x确定y,点的大小由确定z然后,我想将文本标签放置这些点的旁边(例如,该点的右侧),而无需在该点的顶部重叠文本。

如果这些点的大小没有变化,我可以尝试geom_text通过添加缩放常数(例如aes(x=x+1, y=y+1)来简单地修改图层的美感但是,即使在这种简单情况下,我也无法正确放置文本,因为这些点不会随绘图的输出尺寸成比例缩放。换句话说,在500x500的图和1000x1000的图中,点的大小保持不变-它们不会随输出图的尺寸按比例增加。

因此,我认为我必须根据输出图的大小(例如尺寸)来缩放标签的位置,或者必须以ggplot某种方式获取点的半径并移动文本标签。有办法做到ggplot2吗?

这是一些代码:

# Stupid data
df <- data.frame(x=c(1,2,3), 
                 y=c(1,2,3), 
                 z=c(1,2,1),
                 lab=c("a","b","c"), stringsAsFactors=FALSE)

# Plot with bad label placement
ggplot(aes(x=x, y=y), data=df) + 
  geom_point(aes(size=z)) + 
  geom_text(aes(label=lab), 
            colour="red") +
  scale_size_continuous(range=c(5, 50), guide="none")

编辑:我应该提一下,我尝试过hjustvjust在geom_text里面,但是不会产生想要的效果。

# Trying hjust and vjust, but it doesn't look nice
ggplot(aes(x=x, y=y), data=df) + 
  geom_point(aes(size=z)) + 
  geom_text(aes(label=lab), hjust=0, vjust=0.5, 
            colour="red") +
  scale_size_continuous(range=c(5, 50), guide="none")

编辑:感谢Henrik和shujaa,我现在设法得到了一些可行的方法。万一有人共享一个更通用的解决方案,我将开放这个问题。

只是我为此使用的一个模糊信息:我正在绘制地图,并指示某些站点的降水量,其点的大小与所观察到的降水量成比例。我想以美观的方式在每个点旁边添加一个桩号标签。我将针对不同区域制作更多这些图,并且我的输出图可能对每个图具有不同的分辨率或比例(例如,由于不同的投影),因此需要一个通用的解决方案。position_jitter如果我在周末有时间,我可能会尝试创建一个习惯,如baptiste建议的那样。

浸礼会

看来position _ ***无法访问其他图层使用的比例,所以这是不可行的。您可以克隆GeomText,以根据映射的大小移动标签,但是对于一个非常笨拙和脆弱的解决方案来说,这是很费力的,

在此处输入图片说明

geom_shiftedtext <- function (mapping = NULL, data = NULL, stat = "identity", 
                       position = "identity", 
                       parse = FALSE, ...) { 
  GeomShiftedtext$new(mapping = mapping, data = data, stat = stat, position = position, 
               parse = parse, ...)
}
require(proto)
GeomShiftedtext <- proto(ggplot2:::GeomText, {
  objname <- "shiftedtext"
  draw <- function(., data, scales, coordinates, ..., parse = FALSE, na.rm = FALSE) {
    data <- remove_missing(data, na.rm, 
                           c("x", "y", "label"), name = "geom_shiftedtext")

    lab <- data$label
    if (parse) {
      lab <- parse(text = lab)
    }

    with(coord_transform(coordinates, data, scales),
         textGrob(lab, unit(x, "native") + unit(0.375* size, "mm"), 
                  unit(y, "native"), 
                  hjust=hjust, vjust=vjust, rot=angle, 
                  gp = gpar(col = alpha(colour, alpha), 
                            fontfamily = family, fontface = fontface, lineheight = lineheight))

         )
  }

})


df <- data.frame(x=c(1,2,3), 
                 y=c(1,2,3), 
                 z=c(1.2,2,1),
                 lab=c("a","b","c"), stringsAsFactors=FALSE)

ggplot(aes(x=x, y=y), data=df) + 
  geom_point(aes(size=z), shape=1) + 
  geom_shiftedtext(aes(label=lab, size=z),
            hjust=0, colour="red") +
  scale_size_continuous(range=c(5, 100), guide="none")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ggplot2中将点大小调整为绘图的比例?

来自分类Dev

如何在ggplot2中为树图的标签文本设置相同的大小

来自分类Dev

如何在ggplot2中将多个标签格式化为单个图例

来自分类Dev

如何在ggplot2中将多个标签格式化为单个图例

来自分类Dev

如何在ggplot2中将轴居中

来自分类Dev

如何在ggplot2的坐标极坐标图中将标签中的文本对齐到左侧?

来自分类Dev

如何在R中的ggplot2中的图块上放置标签?

来自分类Dev

如何在R中的ggplot2中的图块上放置标签?

来自分类Dev

如何在ggplot2中的分组条形图列上放置标签

来自分类Dev

如何在ggplot2中将表达式设置为构面的轴文本?

来自分类Dev

如何在ggplot2中分别缩放线和点的大小

来自分类Dev

如何在ggplot2中的图之间保持点大小比例恒定?

来自分类Dev

如何更改ggplot2中图例文本的大小?

来自分类Dev

如何在 ggplot2 中的 geom_bar() 上放置标签(没有手动 y_position)

来自分类Dev

在ggplot2中的geom_segment旁边添加文本

来自分类Dev

如何在ggplot2中将stat与geom_violin一起使用

来自分类Dev

如何在ggplot2中将列名设置为直方图标题

来自分类Dev

如何在ggplot2中将重要变量彼此隔离

来自分类Dev

如何在ggplot2中将geom_text显示为百万

来自分类Dev

如何在ggplot2中将stat与geom_violin一起使用

来自分类Dev

我如何将div中的文本放置在图像旁边?

来自分类Dev

如何在ggplot2中获取直方图的数据标签?

来自分类Dev

如何在ggplot2中旋转标签?

来自分类Dev

如何在函数内部放置ggplot2图的标签包装器?

来自分类Dev

将几何标签放置在ggraph / ggplot2中的圆形布局之外

来自分类Dev

如何在Bootstrap3中将响应图像旁边的文本居中

来自分类Dev

ggplot2点标签和中断中的标签

来自分类Dev

使用ggplot2将标签居中放置在标签上,并将标签移动到R中错误栏的顶部

来自分类Dev

如何在绘图的文本注释中放置+/-加减运算符(ggplot2)?

Related 相关文章

  1. 1

    如何在ggplot2中将点大小调整为绘图的比例?

  2. 2

    如何在ggplot2中为树图的标签文本设置相同的大小

  3. 3

    如何在ggplot2中将多个标签格式化为单个图例

  4. 4

    如何在ggplot2中将多个标签格式化为单个图例

  5. 5

    如何在ggplot2中将轴居中

  6. 6

    如何在ggplot2的坐标极坐标图中将标签中的文本对齐到左侧?

  7. 7

    如何在R中的ggplot2中的图块上放置标签?

  8. 8

    如何在R中的ggplot2中的图块上放置标签?

  9. 9

    如何在ggplot2中的分组条形图列上放置标签

  10. 10

    如何在ggplot2中将表达式设置为构面的轴文本?

  11. 11

    如何在ggplot2中分别缩放线和点的大小

  12. 12

    如何在ggplot2中的图之间保持点大小比例恒定?

  13. 13

    如何更改ggplot2中图例文本的大小?

  14. 14

    如何在 ggplot2 中的 geom_bar() 上放置标签(没有手动 y_position)

  15. 15

    在ggplot2中的geom_segment旁边添加文本

  16. 16

    如何在ggplot2中将stat与geom_violin一起使用

  17. 17

    如何在ggplot2中将列名设置为直方图标题

  18. 18

    如何在ggplot2中将重要变量彼此隔离

  19. 19

    如何在ggplot2中将geom_text显示为百万

  20. 20

    如何在ggplot2中将stat与geom_violin一起使用

  21. 21

    我如何将div中的文本放置在图像旁边?

  22. 22

    如何在ggplot2中获取直方图的数据标签?

  23. 23

    如何在ggplot2中旋转标签?

  24. 24

    如何在函数内部放置ggplot2图的标签包装器?

  25. 25

    将几何标签放置在ggraph / ggplot2中的圆形布局之外

  26. 26

    如何在Bootstrap3中将响应图像旁边的文本居中

  27. 27

    ggplot2点标签和中断中的标签

  28. 28

    使用ggplot2将标签居中放置在标签上,并将标签移动到R中错误栏的顶部

  29. 29

    如何在绘图的文本注释中放置+/-加减运算符(ggplot2)?

热门标签

归档