gpt4 book ai didi

重置 ggplot 分面每列中的颜色

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

我有一个带有面和颜色的 ggplot。颜色与“ID”相关,方面的列与“类型”相关。一个 ID 总是在同一个类型中,但每个类型中有不同数量的 ID。我想用刻面的每一列重置颜色,以在颜色上有更大的差异。

ggplot(data = plt_cont_em, aes(x = Jahr, y = Konz)) +
geom_point(aes(color=factor(ID))) +
facet_grid(Schadstoff_ID ~ Type, scales = "free_y")

现在它看起来像:
ggplot now

我明白,我必须为颜色引入一个虚拟变量。但是有没有一种简单的方法来计算每种类型中的 ID,从每种类型中以 1 开始?

由于数据是 secret 的,我创建了显示相同问题的虚拟数据。
     ID<-c()
Type<-c()
Jahr<-c()
Schadstoff<-c()
Monat<-c()
Konz<-c()
for (i in 1:25){
#i = ID
#t = Type
t<-sample(c("A","B","C"),1)
for (j in 1:5){
#j = Schadstoff
if(runif(1)<0.75){
for(k in 2015:2020){
#k = Jahr
for(l in 1:12){
#l = Monat
if(runif(1)<0.9){
ID<-c( ID,i)
Type<-c( Type,t)
Jahr<-c( Jahr,k)
Schadstoff<-c( Schadstoff,j)
Monat<-c( Monat,l)
Konz<-c( Konz,runif(1))
}
}
}
}
}
}
tmp<- data.frame(ID,Type, Jahr, Schadstoff, Monat, Konz)

tmp<-tmp %>% group_by( Type) %>% mutate( Color=row_number())

p<-ggplot(data = tmp, aes(x = Jahr, y = Konz)) +
geom_point(aes(color=factor(Color)), size=0.8) +
facet_grid(Schadstoff ~ Type, scales = "free") +
theme_light() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p

问题仍然存在,分组不起作用并且每行的颜色都是唯一的。

最佳答案

使用 dplyr您可以 group_by键入并使用 dense_rank 创建一个新列的ID每组内:

plt_cont_em %>%
group_by(Type) %>%
mutate(Type_ID = dense_rank()) %>%
ggplot() +
...

这将在组内从最小到最大对每个 ID 进行“排名”,保留具有相同 ID 和相同值的记录。

然后您可能会想要排除图例,因为它没有什么意义。

library(dplyr)
library(ggplot2)

# Using provided random data
tmp <- tmp %>%
group_by(Type) %>%
mutate(Color = dense_rank(ID))

ggplot(data = tmp, aes(x = Jahr, y = Konz)) +
geom_point(aes(color = factor(Color)), size = 0.8) +
facet_grid(Schadstoff ~ Type, scales = "free") +
theme_light() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))



创建于 2020-04-02 由 reprex package (v0.3.0)

关于重置 ggplot 分面每列中的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60991887/

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