单独或通过美学轻推/重新定位geom_labels?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单独或通过美学轻推/重新定位geom_labels?相关的知识,希望对你有一定的参考价值。

我正在尝试使用ggplot()绘制对一系列李克特式问题的回答。我使用dplyr为每个问题计算了每个响应的比例(“非常同意”,“同意”等),现在想要在堆积条形图中绘制比例(每个问题一个条)。下面的代码给出了我到目前为止的想法。

library(ggplot2)

dat <- data.frame(Question = "Q1", 
                  Response = LETTERS[1:5], 
                  freq = c(.01, .03, .11, .35, .5),
                  offset = c(.5, .25, 0, 0, 0))

ggplot(dat, aes(x = Question, y = freq, fill = Response, label = Response)) + 
  geom_col() + 
  geom_label(position = position_stack(vjust = 0.5))

我需要为显示比例的每个响应添加标签;我的问题出现了,因为很少有受访者不同意/非常不同意,这意味着这些回复的条形太小而不能包含标签(参见示例中的A和B),并且它们重叠。

我想将固定数量的特定响应的标签偏移,以便它们不重叠。直观地说,我希望这样的东西能起作用:

ggplot(dat, aes(x = Question, y = freq, fill = Response, label = Response)) + 
  geom_col() + 
  geom_label(position = position_stack(vjust = 0.5), nudge_x = offset)

但是这会返回“错误:你必须指定positionnudge_x / nudge_y。”

我尝试过使用vjust美学,但这并没有足够的标签来解决问题。

关于如何通过美学重新定位geom_labels的任何建议?如果您需要任何其他信息,请告诉我们!

答案

1.“错误:您必须指定任一位置或nudge_x / nudge_y。”

错误是非常明显的,你不能将nudge_xposition_stack结合使用其中一个或另一个,因为两者都是相同的position参数的选项:

来自ggplot2 source code

  if (!missing(nudge_x) || !missing(nudge_y)) {
    if (!missing(position)) {
      stop("You must specify either `position` or `nudge_x`/`nudge_y`.", call. = FALSE)
    }

    position <- position_nudge(nudge_x, nudge_y)
  }

2.关于如何通过美学重新定位geom_labels的任何建议?

dat <- data.frame(Question = "Q1", 
                  Response = LETTERS[1:5], 
                  freq = c(.01, .03, .11, .35, .5),
                  offset = c(.03, 0, 0, 0, 0))

ggplot(dat, aes(x = Question, y = freq, fill = Response, label = Response)) + 
  geom_col() + 
  geom_label(aes(y = freq + offset), position = position_stack(vjust = 0.5))

您可以通过在aes调用中再次调用geom_label来更改美学,这里我将offset添加到原始频率(请注意,我还更改了数据框中的偏移值以生成更好的绘图):

enter image description here

以上是关于单独或通过美学轻推/重新定位geom_labels?的主要内容,如果未能解决你的问题,请参考以下文章

使用 geom_label() 添加指向重要点的线

ggplotly 中 geom_label 的替代方案

geom_label 中的下标

word文档怎么重新设置页码

在ggplot(R)上包装geom_text / geom_label [重复]

css动画后文本“轻推”自身