2013-06-28 58 views
2

業餘R用戶在這裏。我在網上看起來很難,看看這個問題是否已被回答/詢問,但我還沒有找到一個好的答案。我無法發佈圖片,因爲我沒有10個「聲望」​​在數據框中按因子排序堆積條形圖

我想要一個堆積條形圖,它根據攝取路線的貢獻百分比(按降序)對x變量進行排序。

Percent<-c(0.4,0.75,0.8, 0.3,0.1,0.6,0.25,0.5) 
Inh<-data.frame(ID=c(rep(1,4),rep(2,4)),Age=factor(rep(1:4,2), label=c("0-1 year", "1-2 years", "2-3 years","3-6 years")), Route=factor(rep(1), label="Inhalation"), Percent=Percent) 

Ing<-data.frame(ID=c(rep(1,4),rep(2,4)),Age=factor(rep(1:4,2), label=c("0-1 year", "1-2 years", "2-3 years","3-6 years")), Route=factor(rep(1), label="Ingestion"),  Percent=1-Percent) 

df<-data.frame(rbind(Inh,Ing)) 
ggplot(df,aes(x=ID,y=Percent,fill=Route))+ geom_bar(stat="identity")+ 
facet_wrap(~Age, scales = "free_x") + 
ylab("Percent Contribution") + 
labs(title = "Route Contribution to Exposure by Age Groups") 

enter image description here

但我希望它看起來像這樣,我手動嘲笑了:

Percent<-c(0.1,0.6,0.25, 0.3,0.4,0.75,0.8,0.5) 
Inh<-data.frame(ID=c(rep(1,4),rep(2,4)),Age=factor(rep(1:4,2), label=c("0-1 year", "1-2 years", "2-3 years","3-6 years")), Route=factor(rep(1), label="Inhalation"), Percent=Percent) 

Ing<-data.frame(ID=c(rep(1,4),rep(2,4)),Age=factor(rep(1:4,2), label=c("0-1 year", "1-2 years", "2-3 years","3-6 years")), Route=factor(rep(1), label="Ingestion"),  Percent=1-Percent) 

df<-data.frame(rbind(Inh,Ing)) 
ggplot(df,aes(x=ID,y=Percent,fill=Route))+ geom_bar(stat="identity")+ 
facet_wrap(~Age, scales = "free_x") + 
ylab("Percent Contribution") + 
labs(title = "Route Contribution to Exposure by Age Groups") 

enter image description here

預先感謝您!

更新:感謝羅蘭,我有一個情節!雖然問題仍然清晰。對於那些有興趣在這裏的代碼和最終產品:

ggplot(df,aes(x=id2,y=Percent,fill=Route, width=1,order = -as.numeric(Route)))+ 
geom_bar(stat="identity")+ 
facet_wrap(~Age, scales = "free_x") + 
xlab(" ")+ 
ylab("Percent Contribution") + 
theme(axis.text.x = element_blank(), axis.ticks.x= element_blank()) + 
labs(title = "DEHP Route Contribution to Exposure by Age Groups") 

enter image description here

+1

對於圖片,你可以把它作爲鏈接,並有更高的聲譽的人可以添加它。 – agstudy

+0

在線放置圖像或圖像:即您的輸入提供給您的圖像和模擬您希望產生的圖像。 –

回答

1

這改變了順序不改變數據(如你在實物模型做)。這個想法是創建一個有序的(由Percent)因子給出AgeID的交互作用並將其用於繪圖,但更改軸標籤以僅匹配ID值。

df <- df[order(df$Route,df$Percent),] 
df$id2 <- factor(paste(df$ID,df$Age),levels=unique(paste(df$ID,df$Age)),ordered=TRUE) 

ggplot(df,aes(x=id2,y=Percent,fill=Route))+ 
    geom_bar(stat="identity")+ 
    scale_x_discrete(labels = setNames(regmatches(levels(df$id2),regexpr("[[:alnum:]]*",levels(df$id2))),levels(df$id2))) + 
    facet_wrap(~Age, scales = "free_x") + 
    xlab("ID") + 
    ylab("Percent Contribution") + 
    labs(title = "Route Contribution to Exposure by Age Groups") 

enter image description here

不過,我認爲所產生的情節混亂,難以閱讀。

+0

@ Roland-謝謝!您的解決方案奏效是的,我認爲這些情節在提交時需要一些解釋。我已經與這個情節和並排的盒子情節來回走動。任何額外的建議,將不勝感激。再次感謝。 – LeslieKish

0

要理解的一個基本問題是訂單是圖的屬性還是數據本身的屬性。 R傾向於數據的屬性而不是圖形,因此繪圖函數沒有用於重新排序零件的參數,因爲在創建或編輯數據時應該完成這些參數。 reorder函數是對未來圖形/分析中使用的因子級別進行重新排序的一種方法。