gpt4 book ai didi

r - 如何使geom_area()为缺失值留出空隙?

转载 作者:行者123 更新时间:2023-12-04 11:24:43 29 4
gpt4 key购买 nike

当我使用geom_area()进行绘图时,我希望它的性能与geom_bar()相似,但是由于缺少值,这种行为使我有些困惑。

    require(dplyr)
require(ggplot2)

set.seed(1)

test <- data.frame(x=rep(1:10,3), y=abs(rnorm(30)), z=rep(LETTERS[1:3],10)) %>% arrange(x,z)

# I also have no idea why geom_area needs the data.frame to be sorted first.

test[test$x==4,"y"] <- NA

ggplot(test, aes(x, y, fill=z)) + geom_bar(stat="identity", position="stack")

生成此堆积的条形图。

但是,如果我更改为stack_area(),则会在缺少的值之间进行插值。
> ggplot(test, aes(x, y, fill=z)) + geom_area(stat="identity", position="stack")
Warning message:
Removed 3 rows containing missing values (position_stack).

如果我添加 na.rm=FALSEna.rm=TRUE,则没有任何区别。

ggplot(test, aes(x, y, fill=z)) + geom_area(stat="identity", position="stack", na.rm=TRUE) Warning message: Removed 3 rows containing missing values (position_stack)



ggplot(test, aes(x, y, fill=z)) + geom_area(stat="identity", position="stack", na.rm=FALSE) Warning message: Removed 3 rows containing missing values (position_stack).



显然,我正在尝试的方法均无效。如何使用 stack_area()显示系列中的空白?

最佳答案

看来问题与值的堆叠方式有关。该错误消息告诉您,删除了包含缺失值的行,因此在您绘制的数据中根本没有间隙。

但是,geom_ribbon是一种特殊情况,geom_area为缺失值留下了空白。 geom_ribbon也会绘制一个区域,但是您必须指定最大和最小y值。因此,可以通过手动计算这些值,然后使用geom_ribbon()进行绘制来完成技巧。从您的数据帧test开始,我创建yminymax数据,如下所示:

test$ymax <-test$y
test$ymin <- 0
zl <- levels(test$z)
for ( i in 2:length(zl) ) {
zi <- test$z==zl[i]
zi_1 <- test$z==zl[i-1]
test$ymin[zi] <- test$ymax[zi_1]
test$ymax[zi] <- test$ymin[zi] + test$ymax[zi]
}

然后用 geom_ribbon绘图:
ggplot(test, aes(x=x,ymax=ymax,ymin=ymin, fill=z)) + geom_ribbon()

这给出了下面的图:

关于r - 如何使geom_area()为缺失值留出空隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30116606/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com