Как переставить строки с метками оси X в ggplot2

Я пытаюсь построить распределение длины поездки (на каждые 10 миль увеличения расстояния я хочу узнать процент поездок в этом бункере за этот конкретный год). Когда я рисую это в ggplot2, мои метки деления оси X упорядочены в алфавитном порядке, а не в порядке увеличения расстояния. Я пытался использовать различные предложенные приемы (Изменить порядок дискретной шкалы x), но я никуда не денусь. Одна ссылка Мой код находится ниже, а набор данных здесь (http://goo.gl/W1jjfL).

library(ggplot2)
library(reshape2)

nwpt <- subset(nonwork, select=c(Distance, PersonTrips1995, PersonTrips2001, PersonTrips2009))
nwpt <- melt(nwpt, id.vars="Distance") 

ggplot(data=nwpt, aes(x=Distance, y=value, group=variable, colour=variable)) +  scale_x_discrete(name="Distance") + geom_line(size=0.5) + ggtitle("Non Work Person Trips") + ylab("Percent") 

Я проверил, является ли переменная Distance фактором, как показано ниже:

is.factor(nwpt$Distance) 1 ИСТИНА

Однако результат, который я получаю, не такой, как я хочу. Вместо первой категории менее 10 миль, следующей 10-14 миль и т. д. Я получаю график, как показано ниже (PDF здесь: http://goo.gl/V7yvxT).

введите здесь описание изображения

Любая помощь приветствуется. ТИА Кришнан


person Krishnan    schedule 27.11.2013    source источник
comment
переупорядочить уровни факторов. Я думаю, что функция reorder.factor() в пакете gdata автоматически сделает то, что вам нужно.   -  person Ben Bolker    schedule 28.11.2013


Ответы (1)


Вот один из способов:

library(ggplot2)
library(reshape2)

nwpt <- subset(nonwork,
               select=c(DID,Distance,PersonTrips1995,PersonTrips2001,PersonTrips2009))
nwpt <- melt(nwpt, id.vars=c("DID","Distance")) 

ggplot(data=nwpt, aes(x=DID, y=value, colour=variable)) + 
  geom_line(size=0.5) + 
  labs(title="Non Work Person Trips", y="Percent") +
  scale_x_discrete(name="Distance", labels=nwpt$Distance) + 
  theme(axis.text.x=element_text(angle=90))

Производит это с вашим набором данных:

person jlhoward    schedule 28.11.2013