2015-08-04 17 views
0

Я следующий кадр данных:R - порядок легенда ggplot

Author<-c("University","Office", "School","University","Office", "School","University","Office", "School") 
Typ<-c("Text", "Text", "Text","Data", "Data","Data", "List", "List", "List") 
Number<-c("3","1","6","4","4","2","8","1","1") 
df<-data.frame(Typ,Author,Number) 

Если я применяю:

ggplot(df, aes(x=Author, y=Number, fill=Typ)) + 
    geom_bar(stat='identity') + coord_flip() 

затем я получаю столбчатый участок, где Бруски заказов в порядке рамки даты, то есть Text, Data, List, но легенда находится в алфавитном порядке. Есть ли какая-либо (не грубая сила, то есть вручную), такая, что я могу переставить легенду также в «заданном» порядке df, то есть в Text, Data, List?

(только для уточнения). У меня есть набор данных, которые также больше в том смысле, что векторы «Typ» (которые также различаются в каждом кадре данных) имеют больше записей, порядок которых не должен изменяться а также отображаться в легенде.Я написал рутину, которая отображает все эти фреймы данных, поэтому я не могу менять легенды вручную - я действительно ищу обычные решения)

+1

Легенда не обязательно в алфавитном порядке, но это упорядоченный по уровням фактора: 'ДФ $ Typ'. Одним из способов изменения легенды является изменение порядка уровней факторов, например. 'df $ Typ <- factor (df $ Typ, levels = rev (levels (df $ Typ)))'. – lukeA

+0

Если вы не хотите напрямую изменять свои данные, вы можете попробовать: ggplot (df, aes (x = Author, y = Number, fill = factor (Typ, levels = c ('Text', 'Data', 'List ')) )) + geom_bar (stat =' identity ') + coord_flip() ggplot (df, aes (x = Author, y = Number, fill = factor (Typ, levels = c (' Text ',' Data ',' List ')) +)) + geom_bar (stat =' identity ') + coord_flip() ' –

+0

Привет! Спасибо за ваши ответы - нет, мой реальный фрейм данных намного больше (гораздо больше «typ», поэтому для ручной настройки уровней, к сожалению, нет опции. К сожалению, также первый подход меняет порядок typ, который не то, что мне нужно. – chris17

ответ

3

Вы можете автоматически устанавливать уровни в соответствии с порядком, как они появляются в вашем data.frame:

df$Typ <- factor(df$Typ, levels = unique(df$Typ)) 
ggplot(df, aes(x=Author, y=Number, fill=Typ)) + 
     geom_bar(stat='identity') + coord_flip() 

Таким образом, вы измените или дер вашего factor в соответствии с порядком в df$Typ:

enter image description here

+0

ЧТО ЭТО! Большое спасибо! – chris17

+0

@ chris17 Пожалуйста, отметьте вопрос как ответ, когда вы удовлетворены данным ответом (вы можете сделать это, нажав галочку под голосованием ответа counts). Это мешает людям тратить время на ответ на вопрос, на который уже был дан ответ. – Heroka

+0

сделано, спасибо за остаток – chris17