2012-10-29 61 views
0

我在生產我認爲應該是一個相當直接的ggplot2圖時遇到了一些麻煩。通過多維數據重新排序ggplot2繪圖

我在數據框中有一些實驗數據。每個數據條目都由正在測量的系統以及運行的實例(問題)來標識。每個條目還具有針對特定系統和實例測量的值。

例如:

mydata <- data.frame(System=c("a","b","a","b","a","b"), Instance=factor(c(1,1,2,2,3,3)), Value=c(10,5,4,2,7,8)) 

現在,我想在x軸包含實例標識符的箱線圖繪製該數據,並將該欄的顏色指示哪個系統的值對於。酒吧高度應該由數據框中的值加權。

這幾乎沒有什麼我想:

qplot(data=mydata, weight=Value, Instance, fill=System, position="dodge") 

,我想這樣做的最後一件事是重新排列欄,使他們由系統A的值排序。然而,我想不出一個優雅的方式來做到這一點。

我的第一直覺是使用qplot(data=mydata, weight=Value, reorder(Instance, Value), fill=System, position="dodge"),但是這將被mean值對每個實例秩序,我只想用從A的價值,我可以用qplot(data=mydata, weight=Value, reorder(Instance, Value, function(x) { x[1] }), fill=System, position="dodge")下令以「第一個值」的情況下,但這是危險的(如果訂單改變了呢?)並且不清楚給讀者。

什麼是更優雅的解決方案?

回答

3

我敢肯定有比這更好的辦法,但使Instance一個ordered作品,並會繼續工作,即使數據發生變化:

qplot(data=mydata, weight=Value, 
ordered(Instance, 
levels=mydata[System=='a','Instance'] [order(mydata[System=='a','Value'])]) 
,fill=System, position="dodge") 

也許寫的稍微更優雅的方式同樣的事情:

qplot(data=mydata, weight=Value, 
ordered(Instance, 
levels=Instance [System=='a'] [order(Value [System=='a'])]) # Corrected 
,fill=System, position="dodge") 
+0

謝謝,第一個答案似乎工作,至少不會中斷。不過,我認爲它可能會有所改善。第二個例子不起作用! –

+0

@EdMcMan我在第二個答案中糾正了這個問題。 – nograpes