54

使用 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))

三轮车

这并不理想,因为

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

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

4

4 回答 4

63

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")

在此处输入图像描述

于 2016-03-21T11:31:33.923 回答
39

expand我认为这对in很有用scale_continuous

ggplot(data=df,
    aes( x = n.wheels, y = utility, label = word)
  ) +
  geom_text() + 
  scale_x_continuous(expand = expansion(mult = 0.1))

它填充您的数据(乘法或加法)以计算比例限制。除非你有很长的词,否则将其从默认值提高一点可能就足够了。有关?expand_scale更多信息和其他选项,例如仅扩展轴的上限或下限,请参阅。从底部的示例中?expand_scale,看起来默认值是离散尺度的加法 0.6,连续尺度的乘法 0.05。

于 2014-07-18T18:00:47.173 回答
19

您可以关闭剪辑。对于您的示例,它的效果很好。

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::grid.draw(gt)

剪裁

于 2014-09-14T22:02:09.640 回答
2

我敢肯定有人可以想出一种更快地编程的方法,但这里有一个答案,尤其适用于具有不同范围的多个方面 - 我修改了 data.frame 以在不同的 x 上有两个方面和y 尺度:

df <- data.frame(word = c("bicycle", "tricycle", "quadricycle"),
                 n.wheels = c(2,3,4, .2, .3, .4),
                 utility = c(10,6,7, 1, .6, .7),
                 facet = rep(c("one", "two"), each = 3))

然后,我创建一个虚拟数据框,确定每个方面的范围 x 和 y 的宽度(例如,diff(range(n.wheels))),将该宽度除以一个合适的数字(取决于标签的长度,我选择了 8),并添加填充到每个方面的最小和最大 x 和 y 值:

pad <- rbind(ddply(df, .(facet), summarize,
             n.wheels = min(n.wheels) - diff(range(n.wheels))/8, 
             utility = min(utility) - diff(range(utility))/8),
ddply(df, .(facet), summarize,
             n.wheels = max(n.wheels) + diff(range(n.wheels))/8,
             utility = max(utility) + diff(range(utility))/8))
pad$word <- NA

然后,您可以将该图层添加到您的绘图中,并将颜色设置为 NA:

ggplot(data=df, aes(x=n.wheels, y=utility, label = word))  + 
   geom_text() + 
   geom_point(data = pad, aes(x = n.wheels, y = utility), colour = NA) +
   facet_wrap(~facet, ncol = 1, scales = "free") 

结果:没有截止标签的可重复的“自动化”图(您可以稍后选择将比例更改为更漂亮......)

带有漂亮标签的多面 ggplot

于 2016-04-25T15:22:54.070 回答