【问题标题】:How to vary the length of text in geom_text in R ggplot?如何在 R ggplot 中改变 geom_text 中的文本长度?
【发布时间】:2018-11-23 08:46:57
【问题描述】:

我正在使用 R 中的 ggplot 中的 geom_label 绘制一些文本,但我不知道如何根据变量改变文本的大小。请注意,“大小”不是指文本的宽度,而是它的长度。考虑以下虚拟数据及其生成的图形:

x.cord <- c(4,5,1,6)
duration <- c(0.4, 0.7, 0.2, 0.3)
text <- c("know", "boy", "man", "gift")

df <- data.frame(cbind(x.cord, duration, text))


p <- ggplot(df, aes(x.cord, rownames(df), label = text))

p + geom_label(aes(fill=text))

在上面的图中,我可以绘制位于 x.cord(即 x 坐标)的文本,但我也希望文本的长度等于持续时间变量。

如果我使用size参数如下:

p + geom_label(aes(fill=text, size=duration))

我得到下图:

我可以根据上图所示的持续时间变量来控制文本的“宽度”,但我似乎找不到任何可以帮助我控制文本框“长度”的参数.有什么建议我该怎么做?

【问题讨论】:

  • 先尝试绘制宽度为duration 的条形图,然后在顶部添加第二层标签。
  • @EcologyTom:我不确定我是否理解。能否请您使用演示代码进行解释。

标签: r ggplot2 plot geom-text


【解决方案1】:

不是最优雅的解决方案,但我不能 100% 确定您想要什么。我认为这也是 EcologyTom 的想法。也许是这样的?

x.cord <- c(4,5,1,6)
duration <- c(0.4, 0.7, 0.2, 0.3)
text <- c("know", "boy", "man", "gift")
df <- data.frame(cbind(as.numeric(x.cord), as.numeric(duration), text))

p = ggplot(df, aes(x.cord, as.numeric(rownames(df)), label = text)) +
  geom_tile(aes(x = x.cord, y = as.numeric(rownames(df)), width = duration, height = 0.1, fill = text)) +
  geom_text()
p

【讨论】:

  • 行得通!尽管我注意到 geom_tile 有时位于文本下方,有时位于文本上方,或者有时包含在您的图中的文本中。有没有办法可以确保它始终位于文本下方?
  • 我想我不明白。它总是在文本下方,因为我们首先创建了 geom。还是你的意思是比文字短的紫色?如果这是一个问题,您必须减小文本大小,因为条形的大小在您的示例中是固定的。
  • 是的,这就是我的想法。我认为也应该可以使条形图从xcord 延伸到xcord + duration,如果您希望它们向右延伸,而不是仅仅与xcord 点重叠
  • 是的,为了更直接的控制,应该使用geom_rect() 而不是geom_tile()。它需要 x.min、x.max、y.min、y.max,而不是中点和宽度/高度。因此,完全控制更好,但更难与文本正确对齐。
猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 2017-05-22
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
相关资源
最近更新 更多