R ggplot忽略x轴因子水平

R ggplot忽略x轴因子水平,r,ggplot2,R,Ggplot2,我有以下问题:如果我运行代码,我的X轴标签由于未知原因松动,指定的因子水平,而不是顺序:1周,2周变为:1周,10周。。。当我使用geom_线和geom_点时: datax <- read.csv("https://raw.githubusercontent.com/justasmundeikis/stackoverflow/main/example.csv") df <- datax %>% select(2,4,5,7,8,10,11,1

我有以下问题:如果我运行代码,我的X轴标签由于未知原因松动,指定的因子水平,而不是顺序:1周,2周变为:1周,10周。。。当我使用
geom_线
geom_点
时:

datax <- read.csv("https://raw.githubusercontent.com/justasmundeikis/stackoverflow/main/example.csv")
df <- datax %>%
        select(2,4,5,7,8,10,11,14,15)%>%
        rename(week_nr=savaites_mirusiuju_label.en,
               county_c=apskritysLR,
               county=apskritysLR_label.en,
               age_group_c=amzius_mirusiuju,
               age_group=amzius_mirusiuju_label.en,
               sex_c=Lytis,
               sex=Lytis_label.en,
               year=LAIKOTARPIS,
               values=obsValue)%>%
        filter(age_group!="Not indicated")%>%
        mutate(week_nr=factor(week_nr,
                        levels=paste(1:53, "week")))


x <- df %>%
        filter(age_group=="25–29",
               sex_c==0,
               county_c=="00")%>%
        group_by(year, week_nr)%>%
        summarise(values=sum(values))%>%
        mutate(cat=as.factor(ifelse(year>=2020,1,0)))

ggplot(x,aes(x=week_nr, values, group=year))+
        geom_line(data = x%>%filter(cat==1), col="red")+
        geom_point(data = x%>%filter(cat==0), col="grey")+
        theme(axis.text.x = element_text(angle = 90, hjust = 1))
则轴标签顺序正确。 我的主要目标是所有年份都有灰点,但2020年除外。对于2020年,我希望有一条红线,因此我创建了
cat
因子变量

我怎样才能解决这个问题?
提前感谢

我不确定到底是什么问题,以及引擎盖下发生了什么。。。但您可以先绘制
geom_点
,然后绘制
geom_线
来解决问题。我只能猜测原因是,并非两个数据集中都存在您的系数
week\u nr
的所有级别

库(dplyr)
图书馆(GG2)
数据x%
重命名(week_nr=savaites_mirusiuju_label.en,
县c=apskritysLR,
county=apskritysLR_label.en,
年龄组=amzius\u mirusiuju,
年龄组=amzius\u mirusiuju\u label.en,
性交,
性别=Lytis_label.en,
年份=莱科塔皮斯,
值=值)%>%
过滤器(年龄组!=“未显示”)%>%
变异(周数=因子(周数,
级别=粘贴(1:53,“周”))
x%
过滤器(年龄组==“25–29”,
性别=0,
县c==“00”)%>%
分组(年、周)%>%
总结(值=总和(值))%>%
解组()%>%
突变(cat=ifelse(年份>=2020,1,0))
#>`summary()`按'year'重新分组输出(用'.groups'参数覆盖)
ggplot(x,aes(x=周数,数值,组数=年))+
几何点(数据=x%>%过滤器(cat==0),col=“灰色”)+
geom_线(数据=x%>%过滤器(cat==1),col=“红色”)+
主题(axis.text.x=元素\文本(角度=90,hjust=1))
#>警告:删除了包含缺失值(几何点)的2行。

不确定到底是什么问题以及引擎盖下发生了什么。。。但您可以先绘制
geom_点
,然后绘制
geom_线
来解决问题。我只能猜测原因是,并非两个数据集中都存在您的系数
week\u nr
的所有级别

库(dplyr)
图书馆(GG2)
数据x%
重命名(week_nr=savaites_mirusiuju_label.en,
县c=apskritysLR,
county=apskritysLR_label.en,
年龄组=amzius\u mirusiuju,
年龄组=amzius\u mirusiuju\u label.en,
性交,
性别=Lytis_label.en,
年份=莱科塔皮斯,
值=值)%>%
过滤器(年龄组!=“未显示”)%>%
变异(周数=因子(周数,
级别=粘贴(1:53,“周”))
x%
过滤器(年龄组==“25–29”,
性别=0,
县c==“00”)%>%
分组(年、周)%>%
总结(值=总和(值))%>%
解组()%>%
突变(cat=ifelse(年份>=2020,1,0))
#>`summary()`按'year'重新分组输出(用'.groups'参数覆盖)
ggplot(x,aes(x=周数,数值,组数=年))+
几何点(数据=x%>%过滤器(cat==0),col=“灰色”)+
geom_线(数据=x%>%过滤器(cat==1),col=“红色”)+
主题(axis.text.x=元素\文本(角度=90,hjust=1))
#>警告:删除了包含缺失值(几何点)的2行。

由于你的周数是因子而不是1到53之间的数字,这就变得更加困难了(你可以始终将x轴设置为数字,并用文本标记它,这样可以解决问题)。无论如何,发生这种重新排序的原因是,并非所有
week\u nr
的因子级别都出现在子集
cat==“1”
中。未使用的因子级别将被删除,这将触发重新排序。有几种方法可以解决此问题:

  • 添加
    scale\u x\u离散(drop=FALSE)
  • geom_点
    调用移动到
    geom_线
    调用之前,因为用于绘制第一个geom的数据集决定了所使用的级别
  • ggplot(x,aes(周,数值,组=年))+
    几何图形线(数据=x%>%过滤器(cat==“1”),颜色=“红色”)+
    几何点(数据=x%>%过滤器(cat==“0”),颜色=“灰色”)+
    主题(axis.text.x=元素\文本(角度=90,hjust=1))+
    比例x离散(下降=假)
    

    由于你的周数是因子而不是1到53之间的数字,这就变得更加困难了(你可以始终将x轴设置为数字,并用文本标记它,这样可以解决问题)。无论如何,发生这种重新排序的原因是,并非所有
    week\u nr
    的因子级别都出现在子集
    cat==“1”
    中。未使用的因子级别将被删除,这将触发重新排序。有几种方法可以解决此问题:

  • 添加
    scale\u x\u离散(drop=FALSE)
  • geom_点
    调用移动到
    geom_线
    调用之前,因为用于绘制第一个geom的数据集决定了所使用的级别
  • ggplot(x,aes(周,数值,组=年))+
    几何图形线(数据=x%>%过滤器(cat==“1”),颜色=“红色”)+
    几何点(数据=x%>%过滤器(cat==“0”),颜色=“灰色”)+
    主题(axis.text.x=元素\文本(角度=90,hjust=1))+
    比例x离散(下降=假)
    

    Yes@stefan,你走对了方向。调用
    geom_line
    时,调用它的数据中没有第52周或第53周。这些级别将被删除,从而触发重新排序。因此,您可以按照您所做的操作,将
    geom_线
    geom_点
    顺序切换(因此所有级别都出现在第一个geom层中),或者(可能更“正确地”)将
    scale_x_离散(drop=FALSE)
    添加到绘图中,以防止强制重新排序。如果你像我一样,你会对这种行为感到有点惊讶。谢谢你的澄清。正如我已经知道的,你是一个真正的ggplot2巫师,永远是启蒙的源泉。(:圣诞快乐。S。是的@stefan,你走在正确的轨道上。
    ggplot(x,aes(x=week_nr, values, group=year))+
            #geom_line(data = x%>%filter(cat==1), col="red")+
            geom_point(data = x%>%filter(cat==0), col="grey")+
            theme(axis.text.x = element_text(angle = 90, hjust = 1))