2016-01-27 104 views
1

我無法按照出現在軸上的順序製作圖表。ggplot2圖形與標籤不匹配

我以各種可能的方式改變了因素的水平(紅色,水平,...)。當我繪製主圖時,它們的順序是正確的,標籤的順序也是正確的,但箱線圖是按字母順序排列的,一個主圖的內容與另一個主圖的內容切換(按字母順序排列)。

Image of the problem

下面的代碼工作得很好:

a <- ggplot(data, aes(x = GroupX, y = Score, fill=GroupX, order=GroupX))+ 
scale_fill_manual(values=colours) + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1), 
    legend.position="none", 
    panel.background = element_rect(fill = "white"), 
    panel.grid.major = element_line(colour = "gray95"), 
    panel.border = element_rect(fill = NA, colour = "black", size = 2))+ 
ylab("Lesion")+ 
xlab("")+ 
guides(colour=FALSE)+ 
facet_wrap(~ Portion) 

下面的代碼產生正確的方面:

enter image description here

當我嘗試用陰謀:

a + geom_boxplot() 

條形圖的順序和整個圖形按字母順序顯示。

級別格式正確。我無法想象如何糾正這一點。

  • 重複的例子,

數據集:

structure(list(Level = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("A", "B", "C", "D", "E" 
), class = "factor"), Factor = structure(c(1L, 1L, 3L, 3L, 2L, 
2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("X", "Y", "Z" 
), class = "factor"), Valor = c(12, 11, 20, 15, 2, 5, 21, 21, 
51, 1, 2, 15, 2, 56, 5, 21, 5, 12, 21, 15, 23, 5, 4, 55, 1, 2, 
89, 2, 4, 12, 23, 10, 12, 51, 45, 2, 15, 32, 21, 15, 4, 5, 45, 
45, 2, 14)), .Names = c("Level", "Factor", "Valor"), row.names = c(NA, 
-46L), class = "data.frame") 

代碼,而無需更改順序:

a <- ggplot(data, aes(x = Level, y = Valor, fill=Factor, order=Level)) + 
    facet_wrap(~ Factor) 
a + geom_boxplot() 

當我們設定的因素 - 快速的方式:

levels(data$Factor) <- c("Y", "Z", "X") 
levels(data$Level) <- c("D", "C", "A", "B", "E") 

標籤已更改,但情節不變。

+3

你的問題不包含[重複的例子] (http://stackoverflow.com/q/5963269/4303162)。因此很難知道什麼是錯的,並給你一個合適的答案。請提供您的數據(例如通過使用'dput(data)')或使用R中的示例數據集之一。另外,添加將您的問題重現到您的文章所需的最小代碼。 – Stibu

+0

另外,在ggplot2 2.0中,'order'作爲審美被正式棄用。如果您使用的版本<2.0,請在您的帖子中提及;如果您使用> = 2.0,則刪除'order = GroupX',因爲它被ggplot忽略。 – Gregor

+0

您可以使用兩種方法來訂購x軸:1)將其作爲顯式聲明級別的因子,2)使用'scale_x_discrete(breaks = c(「A」,「B」,「C」,「D」 ))' – Matt74

回答

1

你試圖改變自己的級別的順序與

levels(data$Factor) <- c("Y", "Z", "X") 
levels(data$Level) <- c("D", "C", "A", "B", "E") 

然而,這隻會改變級別的名稱。那麼之前的第一級什麼時候會被稱爲「Y」,但它仍然是第一級,並且仍然有與它相關的相同數據。但是您可以重新定義該因素以更改訂單。所以這應該給你預期的結果:

data$Factor <- factor(data$Factor, c("Y", "Z", "X")) 
data$Level <- factor(data$Level, c("D", "C", "A", "B", "E")) 

讓我告訴你這有什麼影響。首先,我繪製你的數據,因爲它是:

enter image description here

然後,我又重新的因素和情節:

data$Factor <- factor(data$Factor, c("Y", "Z", "X")) 
data$Level <- factor(data$Level, c("D", "C", "A", "B", "E")) 
ggplot(data, aes(x = Level, y = Valor, fill=Factor)) + 
    facet_wrap(~ Factor) + geom_boxplot() 

enter image description here

+0

它運行良好,但是當我使用8組時,最後一個出現NA。 – Calefin

+0

這不能從你的例子中複製。如果您遇到新問題,請創建一個新的可重複使用的示例併發佈一個新問題(在您未能在SO上找到已回答的問題後)。插入新數據 – Stibu

+0

。 – Calefin