R ggplot忽略x轴因子水平
我有以下问题:如果我运行代码,我的X轴标签由于未知原因松动,指定的因子水平,而不是顺序:1周,2周变为:1周,10周。。。当我使用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
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))