Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重置ggplot镶嵌面的每列中的颜色_R_Ggplot2_Dplyr_Colors_Facet - Fatal编程技术网

R 重置ggplot镶嵌面的每列中的颜色

R 重置ggplot镶嵌面的每列中的颜色,r,ggplot2,dplyr,colors,facet,R,Ggplot2,Dplyr,Colors,Facet,我有一个小平面和颜色的绘图。颜色与“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") 现在看来: 我明白,我必

我有一个小平面和颜色的绘图。颜色与“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")
现在看来:

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


因为数据是机密的,所以我创建了显示相同问题的虚拟数据

     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

ID使用
dplyr
您可以
类型分组,并使用
ID
在每个组中的
密集等级创建一个新列:

plt_cont_em %>%
  group_by(Type) %>%
  mutate(Type_ID = dense_rank()) %>%
  ggplot() + 
  ...
这将在组中对每个ID从最小到最大进行“排序”,以相同的值保存具有相同ID的记录

你可能会想排除这个传说,因为它没有什么意义

库(dplyr)
图书馆(GG2)
#使用提供的随机数据
tmp%
分组依据(类型)%>%
变异(颜色=密集等级(ID))
ggplot(数据=tmp,aes(x=Jahr,y=Konz))+
几何点(aes(颜色=系数(颜色)),尺寸=0.8)+
小平面网格(Schadstoff~Type,scales=“free”)+
主题灯()
主题(axis.text.x=元素\文本(角度=45,hjust=1))


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

谢谢!不知何故,该组不起作用,现在每行都有一个唯一的行号。此外,我想在图例中保留ID,因为它们稍后将被名称替换,但可能更容易为每种类型绘制一个图,因为只有3种类型。如果没有实际数据,很难知道发生了什么。试着用
dput(plt\u cont\u em)
的输出编辑这个问题,因为数据是机密的(而且非常庞大),所以我不能在这里发布输出。但是我在我的第一篇文章中添加了一个随机数据生成器。啊,我明白了,每个ID在类型中都是重复的。更新我的答案