如何在画布的边界内制作geom_text图

Rob*_*ace 38 plot text r ggplot2

使用geom_text标记散点图的外围点.根据定义,这些点往往靠近画布边缘:通常至少有一个单词与画布边缘重叠,使其无用.

显然,这可以通过以下情况手动解决+ xlim(c(1.5, 4.5)):

# test
df <- data.frame(word = c("bicycle", "tricycle", "quadricycle"),
                 n.wheels = c(2,3,4),
                 utility = c(10,6,7))
ggplot(data=df, aes(x=n.wheels, y=utility, label=word))  + geom_text() + xlim(c(1.5, 4.5))
Run Code Online (Sandbox Code Playgroud)

三轮车

但这并不理想

  1. 它不是自动化的,因此如果要生成许多图,则会减慢过程
  2. 它并不准确,这意味着单词边缘和画布边缘之间的距离在每种情况下都不相等.

搜索这个问题没有找到解决方案,Hadley Wickham似乎满足于在ggplot2的帮助页面中将标签切成两半(我知道Hadley,他们只是一个例子;)

sco*_*coa 47

ggplot 2.0.0的推出了新的选择hjust,并vjustgeom_text()可能与裁剪的帮助,尤其是"inward".我们可以这样做:

ggplot(data=df, aes(x=n.wheels, y=utility, label=word))  + 
  geom_text(vjust="inward",hjust="inward")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Gre*_*gor 27

我认为这是一个良好的使用expandscale_continuous:

ggplot(data=df, aes(x=n.wheels, y=utility, label=word))  + geom_text() + 
    scale_x_continuous(expand = c(.1, .1))
Run Code Online (Sandbox Code Playgroud)

它可以填充您的数据(乘法和加法)来计算比例限制.除非你有很长的话,否则从默认值中略微提升它可能就足够了.有关?expand_scale详细信息和其他选项,请参阅参见,例如仅扩展轴的上限或下限.从底部的例子?expand_scale可以看出,默认值是离散尺度的加性值0.6,连续尺度的乘法值为0.05.

  • 这是一个非常好的解决方案,特别是如果要生成许多图形但您不知道数据的情况。 (2认同)

Her*_*sas 16

你可以关闭剪裁.对于你的例子,它工作得很好.

p <- ggplot(data=df, aes(x=n.wheels, y=utility, label=word))  + geom_text() 
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)
Run Code Online (Sandbox Code Playgroud)

剪掉

  • 在较新版本的 ggplot2 中,您可以使用 `coord_cartesian(clip="off")`,如 /sf/answers/3514199811/ 所示。 (3认同)
  • 这不再起作用了。有新的解决方法吗? (2认同)