【问题标题】:area not properly drawn using geom_area (some area has offset)使用 geom_area 未正确绘制区域(某些区域有偏移)
【发布时间】:2016-09-17 09:38:59
【问题描述】:

我想用 R 绘制一个密度函数并填充它下面的一些区域。我的例子是:

library(ggplot2)
x = seq(-4, 4, 0.1)
y = dnorm(x, mean=0, sd=1)
myDF = data.frame(x,y,xfill=ifelse(x>-1,x,0))
p <- ggplot(myDF, aes(x,y))
p + geom_line(size=1) + geom_area(aes(x=xfill),fill="red")

在 RStudio 中如下图所示。

我在平台上使用 RStudio 版本 0.99.902 和 R 版本 3.3.1 (2016-06-21):x86_64-w64-mingw32/x64 (64-bit) 在以下条件下运行:Windows >= 8 x64 (build 9200 ) 与包 ggplot2_2.1.0

在创建这个问题时我链接到另一个问题 here。现在根据那里的答案之一更改 geom_area 调用

geom_area(aes(x=xfill),fill="red", pos="identity")

然后我的情节看起来像

最后减小 x 步长

x = seq(-4, 4, 0.01)

以某种方式给了我想要的东西。

我的问题:

  1. 有什么想法,为什么 0 附近的区域会出现这个问题?
  2. 为什么 'pos="identity"' 在这里有帮助 - 仍然缺少某些区域?
  3. 我真的解决了这里的问题吗?

【问题讨论】:

  • 我在这里发现了另一个问题(或者可能相同),我将 xfill 设置为 0,对于我不想绘制的 x 值。通过将它们设置为不匹配最小值来解决此问题,在这种情况下:myDF = data.frame(x,y,xfill=ifelse(x&gt;-1,x,-1))

标签: r ggplot2


【解决方案1】:

您可以只使用NA 而不是0 来表示您不想着色的 xfill 值

myDF = data.frame(x,y,xfill = ifelse(x > -1, x, NA))

p <- ggplot(myDF, aes(x,y))
p + geom_line(size=1) + geom_area(aes(x=xfill),fill="red")

另外,一个小提示:如果您首先绘制区域,然后绘制线条,它可能看起来更好,因为线条不会部分被遮挡

ggplot(myDF, aes(x,y)) + 
  geom_area(aes(x=xfill),fill="red") + 
  geom_line(size=1) 

【讨论】:

  • NA 做到了,无需减小步长或使用pos="identity"。似乎 0 被误导为 x 坐标。非常感谢。
【解决方案2】:

我认为 ggplot 正在制作多个区域并将它们堆叠起来,这就是为什么 position = identity 帮助它使区域重叠。

我将更改代码以使 xfill 成为一个二进制变量,用于指定需要哪种填充。减小步长以消除间隙。

x <- seq(-4, 4, 0.01)
y <- dnorm(x, mean=0, sd=1)
myDF <- data.frame(x,y,xfill=ifelse(x>-1,TRUE,FALSE))
ggplot(myDF, aes(x,y, fill = xfill)) + 
       geom_line(size=1) +
       geom_area()

【讨论】:

  • 这会产生两个不同颜色的区域,但不是我想要的。我希望右侧为红色,而左侧根本不着色。
  • \您可以将alpha 设置为零以不显示不需要的颜色
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 2016-11-06
  • 2020-06-30
  • 2018-07-08
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多