【问题标题】:What units are the 'width = ' in geom_bar(aes = ) and position_dodge(width = ) rendered in?geom_bar(aes = ) 和 position_dodge(width = ) 中的“width =”是什么单位?
【发布时间】:2015-11-23 18:12:30
【问题描述】:

我想在其中一个闪避的条上专门添加一些东西,我怎么能做到这一点?

在下面的示例中,我想在 barplot 的 cat3 组中的 A3 上专门分层。我知道 cat3 的 x = 3 但由于闪避宽度和条形宽度的相互依赖性,似乎很难瞄准那个条形。有什么公式可以用来计算x坐标吗?我在下面提供了一个示例代码。谢谢

x1 <- c(15,75,28,60,80,100)
x2 <- c('cat1','cat2','cat3','cat1','cat2','cat3')
x3 <- c('A1','A2','A3','A4','A1','A2')
data=data.frame(cbind(x1,x2,x3),stringsAsFactors = F)
data$x1 <- as.numeric(data$x1)
data$x2 <- factor(data$x2)
data$x3 <- factor(data$x3)

ggplot(data,aes(y = x1, x = x2)) + geom_bar(stat = 'identity', 
                                 aes(fill = data$x3, width = 0.5), 
                                 position = position_dodge(width = 0.8))

【问题讨论】:

  • 它们以绘图单位(至少条宽)为单位。 geom_bar 宽度为 1 将使条形接触,一切都与此相关。顺便说一句,永远不要aes() 中使用data$column - 如果您处理或使用更复杂的统计数据,它将覆盖数据参数并导致问题。你应该有fill = x3 而不是fill = data$x3

标签: r ggplot2


【解决方案1】:

position_dodge() 中的 width 参数指定左侧栏的最左侧边缘与右侧栏的最右侧边缘之间的距离。减淡宽度为 0.8 时,x3 类别的 x = 3 起点与任一条形的边缘之间的距离为 0.4(右侧为 +0.4,左侧为 -0.4) 0.4 的一半(即 0.2)将将您带到条形图的中点(右侧再次为 +0.2,左侧为 -0.2)。这与条形宽度无关。

这是一个示例,我在 cat3 的右侧栏上画了一个 H。 y 单位与 y 轴上的单位对齐。

ggplot(data,aes(y = x1, x = x2)) + 
    geom_bar(stat = 'identity',
             aes(fill = x3, width = 0.5), 
             position = position_dodge(width = 0.8))+
    geom_text(aes(x = 3.2, y = 25, label = "H"), size = 10)

【讨论】:

  • 太棒了。这很适合为 cat3 找到 A3 的中心。有没有办法瞄准A3的最左边?我想这也可能取决于条宽?
  • 我创建了两个新变量w = 0.5dodgew = 0.8,然后将图形代码的最后一行替换为:geom_text(aes(x = (3+(dodgew/2)-(w/2)), y = 25, label = "0"), size = 10)。 (您还需要在图形调用中更新宽度和闪避宽度参数)这似乎非常接近左边缘。事实证明, position_dodge() 宽度参数的条形两侧实际上有一点缓冲空间,所以我最初的答案有点缺陷。我会调查并修复。
  • @tsurudak “position_dodge() 中的 width 参数指定了左侧栏的最左侧边缘和右侧栏的最右侧边缘之间的距离。”。我不认为这是完全正确的。请看this Q&A
猜你喜欢
  • 2017-12-10
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 2020-10-09
  • 2014-02-11
  • 2010-11-15
相关资源
最近更新 更多