2017-09-16 67 views
1

我在RStudio中使用ggplot2來繪製一個圖表,我很難弄清楚在我的R代碼中我的錯誤出現在我的數據集名爲「Mth」的列的排序順序中。爲什麼ggplot2在特定變量上忽略我的R代碼的排序順序?

我的數據集被稱爲data1和它只有2列,即AgeMth

我的代碼立場如下:

library(ggplot2) 
data1 <- read.csv("myfile.csv", as.is=TRUE, header = TRUE) 

Month <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") 

Month2 <- factor (Month, 
       levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), 
       ordered = TRUE) 
mean_age <- data1 %>% 
filter(Mth %in% Month2) %>% 
group_by(Mth) %>% 
summarize(xbar = round(mean(Age, na.rm = TRUE), 0)) 

mean_age$y <- 0.3 

yr_labs <- data.frame(x = 85, y = 0.8, 
        Mth = Month2) 
p <- ggplot(subset(data1, Mth %in% Month2), aes(x = Age)) 
p1 <- p + geom_density(fill = "gray20", color = FALSE, 
        alpha = 0.9, mapping = aes(y = ..scaled..)) + 
geom_vline(data = subset(mean_age, Mth %in% Month2), 
     aes(xintercept = xbar), color = "white", size = 0.5) + 
geom_text(data = subset(mean_age, Mth %in% Month2), 
     aes(x = xbar, y = y, label = xbar), nudge_x = 1.2, 
     color = "white", size = 3.5, hjust = 1) + 
geom_text(data = subset(yr_labs, Mth %in% Month2), 
     aes(x = x, y = y, label = Mth)) + 
facet_grid(Mth ~ ., switch = "y") 

這裏是現行規範的輸出:

enter image description here

可以看出,月份(我的數據集中的列)不符合我上面創建的排序順序。

我在做什麼錯?

+0

你必須重新排序因子水平的數據ordered因素。排序不會影響ggplot2如何顯示它。 – BLT

+0

@BLT謝謝你的回答。我是不是已經通過將其分配給'Month2'來重新排序因子水平? – user3115933

+0

看着你的代碼,我想你實際上需要'Mth'作爲正確級別順序的因素。你不是按照「Month2」進行分組,也不是按照它來進行分組,你使用的是「Mth」,我看不出你已經進行了相關調整。 – BLT

回答

0

嘗試用

data1$Mth <- factor (data1$Mth, 
      levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), 
      ordered = TRUE) 

你需要傳遞給ggplot

p <- ggplot(subset(data1, Mth %in% Month2), aes(x = Age)) 
+0

謝謝。我會試一試,讓你知道它是怎麼回事。 – user3115933

+0

出色地工作! – user3115933