重置 ggplot 分面每列中的颜色

标签 r ggplot2 dplyr colors facet

我有一个带有面和颜色的 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/

相关文章:

r - 具有相等轴的散点图

r - 当我们使用多个geom_bar时,如何添加多个图例?

使用多个数据帧从图中的 ggplot 图例中删除不正确的彩色轮廓?

r - 理解 R 中 'predict' 的输出

html - 如何在选项卡/选项卡集 [rmarkdown/bootstrap] 上添加下拉菜单

r - 使用API​​计算R内两个机场(两列)之间的距离?

r - ggplot geom_point 形状(和 pdf)中未显示的 unicode 符号

使用 dplyr (R) 根据查找表重新编码值

替换数据上的字符

r - 如何将 rowSums 和 ifelse 与 mutate 结合起来