2014-11-20 52 views
10

我有一個數據框,其中包含跨多個類別的x軸數字存儲區和連續y軸數據。最初,我創建了一個盒子圖,使x軸的「因子」分箱,並對融化的數據進行箱形繪製。重複性的數據:如何創建具有大量連續x變量的geom_boxplot

x <- seq(1,10,by=1) 
y1 <- rnorm(10, mean=3) 
y2 <- rnorm(10, mean=10) 
y3<- rnorm(10, mean=1) 
y4<- rnorm(10, mean=8) 
y5<- rnorm(10, mean=12) 
df <- data.frame(x,y1,y2,y3,y4,y5) 
df.m <- melt(df, id="x") 

我的代碼來創建x軸的數據的一個因素:

df.m $ X < - as.factor(df.m $ x)的

我ggplot:

ggplot(df.m, aes(x=x, y=value))+ 
geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.1)+ 
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) 

所得的情節: The resulting plot

問題是我不能使用x軸數字間距,因爲x軸被歸類爲一個因子,它具有相等的間距。我希望能夠使用像scale_x_continuous之類的東西來處理軸斷點和間距,例如,間隔爲2,而不是每隔1個盒子圖,但是當我嘗試用x軸繪製數據「as.numeric 」我剛剛得到的所有數據的一個箱線圖:

plot

任何建議的方式來獲得這種期待連續箱線圖曲線(第一圖像),同時仍然能夠控制的數值屬性x軸?謝謝!

+0

@Henrik谷歌驅動器鏈接的問題不適合你嗎?這應該是這個例子的數據框架。感謝您再次出現並幫助我!這是一個在R世界裏充滿了問題的日子... – AndMan21 2014-11-20 22:31:31

+0

@亨利克塔,對此抱歉。現在編輯 – AndMan21 2014-11-20 22:35:47

回答

16

這是一種使用你在Google上發佈的原始數據的方式 - 實際上它更有幫助,IMO。

ggplot(df, aes(x=CH, y=value,group=CH))+ 
    geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.2)+ 
    scale_x_log10() 

所以,@BenBolker說,之前,他刪除了他的答案(??),你應該離開的x變量(CH)的數值,並在調用aes(...)設置group=CH

儘管您的實際數據存在另一個問題。你的CH或多或少是對數間隔的,所以有大約幾個點數爲1到10之間,等等。ggplot想要使這些盒子的尺寸完全相同,所以對於線性x軸,盒子寬度是小於線寬,並且根本看不到這些框。將x軸更改爲對數座標可以修正或多或少的問題。

0

不要讓x成爲一個因素。你需要美觀映射group是其框中的值與相關聯的因素確定幸運的是,融化後,這是你variable列是什麼:

ggplot(df.m, aes(x = x, y = value, group = variable)) + 
    geom_boxplot() 

由於x仍然是數字,你可以給它在特定的variable級別中您想要的任何值,並且箱線圖將顯示在該點上。或者你可以改變軸,等等。

+0

問題是這樣的:我融化了原始數據,主要是爲了將大量列的數據轉化爲一列。我實際上並不想通過變量進行映射,但希望通過x值進行映射。 – AndMan21 2014-11-20 23:16:47

+1

然後設置'group = x'爲@BenBolker說(太糟糕了,他刪除了他的答案)。 – jlhoward 2014-11-20 23:18:34