按学期和年份订购分面
Order facet by semester and year
我正在尝试使用 facet_grid 订购 ggplot 图,示例:
抱歉,我知道我的数据没有逻辑,但可以显示我的方面问题...
在我的真实数据中我没有这个数据,在这个例子中我只使用下面的这个块来获取我的数据:
################ only to get data in my example ######################
set.seed(12345)
Date <- seq(as.Date("2010/1/1"), as.Date("2013/1/1"), "6 months" )
Y <- rnorm(n=length(Date), mean=100, sd=1)
df <- data.frame(Date, Y)
df$Year <- format(df$Date, "%Y")
df$Sem <- format(df$Date, "%b")
df$Sem <- gsub("ene.", "1S",df$Sem )
df$Sem <- gsub("jul.", "2S",df$Sem )
df$MonthYear <- format(df$Date, "%b-%Y")
############## o #################
我的真实数据中的变量是:
学期、学期和 Y
我在第二次尝试中提取年份进行排序:
df=df %>%
mutate(extract_year= sub('.*(\d{4}).*', '\1', MonthYear))
df$Semester=paste0(df$Sem,df$extract_year)
#这里我尝试对facet进行排序但是我失败了:
df2 <- within(df,Semester <- ordered(Semester, levels = rev(sort(unique(Semester)))))
df2 %>%
ggplot(aes(y = Y )) +
geom_bar() +
facet_grid(Semester~.)
我也试过:
df2 %>%
arrange(extract_year) %>%
ggplot(aes(y = Y )) +
geom_bar() +
facet_grid(Semester~.)
我想要这个订单:
1S2010/2S2010/1S2011/2S2011/1S2012/2S2012
基本上你必须按照你想要的顺序设置级别的顺序。实现这一目标的一种选择是 arrange
按您想要的顺序排列数据,并利用 forcats::fct_inorder
设置 Semester
变量级别的顺序。
library(ggplot2)
library(dplyr)
## Make Semester variable in the desired format
df <- mutate(df, Sem = recode(Sem, Jan = "1S", Jul = "2S"),
Semester = paste0(Sem, Year))
# Arrange and set order
df <- df %>%
arrange(gsub("^(\dS)(\d{4})$", "\2\1", Semester)) %>%
mutate(Semester = forcats::fct_inorder(Semester))
df %>%
ggplot(aes(y = Y )) +
geom_bar() +
facet_grid(Semester~.)
我正在尝试使用 facet_grid 订购 ggplot 图,示例:
抱歉,我知道我的数据没有逻辑,但可以显示我的方面问题...
在我的真实数据中我没有这个数据,在这个例子中我只使用下面的这个块来获取我的数据:
################ only to get data in my example ######################
set.seed(12345)
Date <- seq(as.Date("2010/1/1"), as.Date("2013/1/1"), "6 months" )
Y <- rnorm(n=length(Date), mean=100, sd=1)
df <- data.frame(Date, Y)
df$Year <- format(df$Date, "%Y")
df$Sem <- format(df$Date, "%b")
df$Sem <- gsub("ene.", "1S",df$Sem )
df$Sem <- gsub("jul.", "2S",df$Sem )
df$MonthYear <- format(df$Date, "%b-%Y")
############## o #################
我的真实数据中的变量是:
学期、学期和 Y
我在第二次尝试中提取年份进行排序:
df=df %>%
mutate(extract_year= sub('.*(\d{4}).*', '\1', MonthYear))
df$Semester=paste0(df$Sem,df$extract_year)
#这里我尝试对facet进行排序但是我失败了:
df2 <- within(df,Semester <- ordered(Semester, levels = rev(sort(unique(Semester)))))
df2 %>%
ggplot(aes(y = Y )) +
geom_bar() +
facet_grid(Semester~.)
我也试过:
df2 %>%
arrange(extract_year) %>%
ggplot(aes(y = Y )) +
geom_bar() +
facet_grid(Semester~.)
我想要这个订单:
1S2010/2S2010/1S2011/2S2011/1S2012/2S2012
基本上你必须按照你想要的顺序设置级别的顺序。实现这一目标的一种选择是 arrange
按您想要的顺序排列数据,并利用 forcats::fct_inorder
设置 Semester
变量级别的顺序。
library(ggplot2)
library(dplyr)
## Make Semester variable in the desired format
df <- mutate(df, Sem = recode(Sem, Jan = "1S", Jul = "2S"),
Semester = paste0(Sem, Year))
# Arrange and set order
df <- df %>%
arrange(gsub("^(\dS)(\d{4})$", "\2\1", Semester)) %>%
mutate(Semester = forcats::fct_inorder(Semester))
df %>%
ggplot(aes(y = Y )) +
geom_bar() +
facet_grid(Semester~.)