Сортировка коэффициента оси ggplot в соответствии с уровнями другого фактора

#r #ggplot2

#r #ggplot2

Вопрос:

Я успешно создал прямоугольную диаграмму, которая отображает оценку нескольких районов города, и раскрасил их в соответствии с районом, к которому они принадлежат. Результат выглядит следующим образом:

 library(ggplot2)

df = read.csv("http://pastebin.com/raw/rpPLwSXn")

ggplot(df, aes(x = neighbourhood, y = score, fill = district))  
  geom_boxplot()  
  ggtitle("Neighbourhoods' score")  
  labs(x = "Neighbourhoods", y = "Score", fill = "District")  
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
  

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

Это выглядит довольно хорошо, несмотря на тот факт, что вместо сортировки окрестностей по оси x в алфавитном порядке ( neighbourhood столбец в dataframe) Я бы хотел, чтобы они были отсортированы в соответствии с тем, к какому разделу они принадлежат ( district переменная в dataframe)

Я читал, что я мог бы использовать factor для сопоставления значений в neighbourhood столбце, но это не удалось, поскольку длина вектора отличается (районов меньше, чем окрестностей)

Комментарии:

1. Итак, для районов, которые находятся в одном районе, как вы хотите, чтобы они были упорядочены?

2. Сначала район в алфавитном порядке, затем соседние города в алфавитном порядке, я обновлю описание, как только сяду за клавиатуру

Ответ №1:

Мне нравится идея фасета в ответе Ульрика — это, вероятно, будет самая приятная визуализация. Для упорядочения уровней фактора в neighbourhood столбце, вероятно, самый простой способ выглядит следующим образом:

 # order the data frame as desired
df = df[order(df$district, df$neighbourhood), ]
# set the neighbourhood levels in the order the occur in the data frame
df$neighbourhood = factor(df$neighbourhood, levels = unique(df$neighbourhood))
  

После того, как уровни будут расположены в нужном порядке, за ними последует ось.

Ответ №2:

Я бы разделил округ по линиям facet_wrap (~ district)

Видите?facet_grid и?facet_wrap

Комментарии:

1. Можете ли вы показать полный код? Моя наивная интерпретация вашего предложения заключалась в том, что вы хотели добавить facet_grid(~district) , что было ужасным сбоем. На данный момент это больше похоже на комментарий, чем на ответ.

2. Спасибо за ответ, но огранка — это не то, что я ищу

3. добавление facet_grid(~ district, scales = "free_x", space = "free") работает довольно хорошо — некоторые названия районов не совсем вписываются в полосы фасетов, но это можно обойти с помощью разрывов строк или чего-то еще.