我正在嘗試使用 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 #################
我的真實資料中的變數是:
Sem、學期和 Y
我在第二次嘗試中提取年份進行排序:
df=df %>%
mutate(extract_year= sub('.*(\\d{4}).*', '\\1', MonthYear))
df$Semester=paste0(df$Sem,df$extract_year)
#在這里,我嘗試對方面進行排序,但失敗了:
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
uj5u.com熱心網友回復:
基本上你必須按照你想要的順序設定級別的順序。實作這一目標的一種選擇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~.)

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/359576.html
上一篇:SVG路徑半圓中的圓角
