2015-04-14 6 views
2

У меня есть следующая команда, что я хотел бы нарисовать гистограмму упорядоченным образом.R - переупорядочивающие гистограммы - ggplot2

Таким образом, код выглядит следующим образом:

ggplot(upstream, aes(x=type, y=round(..count../sum(..count..) * 100, 2))) + geom_histogram(fill= "red", color = "red") + xlab ("Vehicle Type") + 
    ylab("Percentage of Vehicles in the Category (%)") + ggtitle ("Percentage of Upstream Vehicles by Type") + 
    stat_bin(geom="text", aes(label=round(..count../sum(..count..) * 100, 2)), vjust=-0.5) 

Выход:

Я хотел бы организовать бары в упорядоченно, так что я использую reorder() функцию в aes , но это дает мне следующую проблему:

stat_bin requires the following missing aesthetics x 

Как я могу использовать переупорядочение без получения этой ошибки? Кажется, я не мог понять это с помощью размещенных решений.

Благодарим за предложения заранее.

EDIT 1: Я установил, что я искал на основе предложений Joran с geom_bar() следующим образом в случае, если кто нуждается в этом:

# Reorder the factor you are trying to plot on the x-side (descending manner) 
upstream$type <- with(upstream, reorder(type, type, function(x) -length(x))) 
# Plotting 
ggplot(upstream, aes(x=type, y=round(..count../sum(..count..) * 100, 2))) + geom_bar(fill= "blue", color = "blue") + xlab ("Vehicle Type") + 
    ylab("Percentage of Vehicles in the Category (%)") + ggtitle ("Percentage of Upstream Vehicles by Type") + 
    stat_bin(geom="text", aes(label=round(..count../sum(..count..) * 100, 2)), vjust=-0.5) 
+0

просто угадать, но трудно сказать, не видя ваши фактические данные: есть тип-переменная? если это так, вам, вероятно, потребуется предварительно преобразовать в числовое число, чтобы иметь возможность переупорядочивать ... – grrgrrbla

+1

Пожалуйста, разместите образец входных данных, сделайте эту проблему [воспроизводимой] (http://stackoverflow.com/questions/5963269/how-to-make -a-пра-р-воспроизводимый-пример). – MrFlick

+0

Что делать, если вы пересчитаете все значения и задаете порядок уровней в 'type', чтобы соответствовать значениям для' y'? –

ответ

2

Вот воспроизводимый пример поведения, которого вы ищете. Он копируется из FAQ: How to order the (factor) variables in ggplot2

# sample data. 
d <- data.frame(Team1=c("Cowboys", "Giants", "Eagles", "Redskins"), Win=c(20, 13, 9, 12)) 

# basic layer and options 
p <- ggplot(d, aes(y=Win)) 

# default plot (left panel) 
# the variables are alphabetically reordered. 
p + geom_bar(aes(x=Team1), stat="identity") 

# re-order the levels in the order of appearance in the data.frame 
d$Team2 <- factor(d$Team1, as.character(d$Team1)) 
# plot on the re-ordered variables (Team2) 
p + geom_bar(aes(x=Team2), data=d, stat="identity") 
Смежные вопросы