2013-06-28 1 views
2

Любительский R пользователь здесь. Я выглядел довольно сложно в Интернете, чтобы узнать, ответил ли этот вопрос/спросил, но я не нашел хорошего ответа. Я не могу опубликовать изображение, так как у меня нет 10 «репутаций»Сортировка Stacked Bar Plot by Factor в dataframe

Я хочу иметь штабелированный график штрихов, который заказывает переменную 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

Поместите изображение или изображения через Интернет: i.e.the ваш вход дает вам и макет, что вы хотели бы, чтобы он производил. –

ответ

1

Это изменяет порядок без изменения данных (как вы делаете в макете). Идея состоит в том, чтобы создать упорядоченный (по Percent) коэффициент, дающий взаимодействие Age и ID и использовать его для построения графика, но измените метки осей, чтобы они соответствовали только значениям 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 является одним из способов изменить порядок использования коэффициента для будущих графиков/анализов.

 Смежные вопросы

  • Нет связанных вопросов^_^