gpt4 book ai didi

r - 在 ggplot 中过滤管道 df

转载 作者:行者123 更新时间:2023-12-05 08:31:12 44 4
gpt4 key购买 nike

我正在使用 dplyr 管道清理我的 df,然后直接输入到 ggplot 中。但是,我一次只想绘制一组,因此我需要过滤到该组。问题是,我希望比例保持不变,就好像所有组都存在一样。是否可以在 ggplot() 命令中进一步过滤管道 df?例如下面。

# create df
set.seed(1)
df <- data.frame(matrix(nrow=100,ncol=5))
colnames(df) <- c("year","group","var1","var2","var3")
df$year <- rep(1:4,each=25)
df$group <- rep(c("a","b","c","d","e"),times=20)
df$var1 <- runif(100,min=0,max=30)
df$var2 <- sample(1:500,100,replace=T)
df$var2[1:25] <- sample(1:100,25,replace = T)
df$var3 <- runif(100,min=0,max=100)

现在用管道清理它(这里我们只是对它做一些随机的事情),然后绘图:

df %>%
filter(var3 < 80) %>% # random thing 1 - filter some stuff
filter(var2 < 400) %>% # random thing 2 - filter more
mutate(var2 = as.numeric(var2)) %>% # random thing 3 - mutate a column
ggplot(aes(x=group,y=var1,color=var2)) +
geom_point()

所以我想一次只绘制一年(从“年”列),但我想以一种可以每年循环绘制的方式进行绘制,但将颜色条缩放到完整的 df 值。

这是我到目前为止的尝试:

dlist <- c(1:4)   #list of years
i <- 2 #current year

df %>%
filter(var3 < 80) %>%
filter(var2 != 56) %>%
mutate(var2 = as.numeric(var2)) %>%
filter(year %in% dlist[i]) %>% # so I can filter for year here, but that makes the colorbar in the ggplot scale for this subset individually, which is no good.
ggplot(aes(x=group,y=var1,color=var2)) +
geom_point()

我认为应该有一种方法可以在 ggplot 括号内使用 .%>% 以便比例保持...但我不太明白。

dlist <- c(1:4)   #list of years
i <- 2 #current year

df %>%
filter(var3 < 80) %>%
filter(var2 != 56) %>%
mutate(var2 = as.numeric(var2)) %>%
ggplot(data = .%>%filter(year %in% dlist[i]), aes(x=group,y=var1,color=var2)) +
geom_point()

但这给了我这个错误:

Error: You're passing a function as global data.
Have you misspelled the `data` argument in `ggplot()`

执行此操作的最佳方法是什么?

最佳答案

您可以不可见地绘制一层,然后使用 data = 绘制过滤层。 %>% 过滤器(...:

df %>%
filter(var3 < 80) %>%
filter(var2 != 56) %>%
mutate(var2 = as.numeric(var2)) %>%
ggplot(aes(x=group,y=var1,color=var2)) +
geom_point(alpha = 0) +
geom_point(data = . %>% filter(year %in% dlist[i]))

enter image description here

关于r - 在 ggplot 中过滤管道 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59957340/

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