Упорядочение меток осей в geom_tile

У меня есть фрейм данных, содержащий данные заказа для каждого из 20+ продуктов из каждой из 20+ стран. Я положил его в таблицу, используяggplot2 с кодом, похожим на это:

require(ggplot2)
require(reshape)
require(scales)

mydf <- data.frame(industry = c('all industries','steel','cars'), 
    'all regions' = c(250,150,100), americas = c(150,90,60), 
     europe = c(150,60,40), check.names = FALSE)
mydf

mymelt <- melt(mydf, id.var = c('industry'))
mymelt

ggplot(mymelt, aes(x = industry, y = variable, fill = value)) +
    geom_tile() + geom_text(aes(fill = mymelt$value, label = mymelt$value))

Который производит сюжет как это:

highlight table

На реальном графике таблица из 450 ячеек очень хорошо показывает «горячие точки». где сосредоточены заказы. Последнее уточнение, которое я хочу реализовать, - это расположить элементы как по оси x, так и по оси y в алфавитном порядке. Таким образом, на графике выше, ось у (variable) будет заказан какall regions, americas, затемeurope и ось х (industry) будет заказанall industries, cars а такжеsteel, Фактически ось X уже упорядочена в алфавитном порядке, но я бы не знал, как этого добиться, если бы это было не так.

Я чувствую себя немного смущенным из-за необходимости задавать этот вопрос, так как знаю, что есть много похожих на SO, но сортировка и упорядочивание в R остаются моей личной ошибкой, и я не могу заставить это работать. Хотя я стараюсь, во всех случаях, кроме самых простых, я заблудилсяfactor, levels, sort, order а такжеwith.

Q. How can I arrange the above highlight table so that both y-axis and x-axis are ordered alphabetically?

РЕДАКТИРОВАТЬ: ответы от smillig и joran ниже разрешают вопрос с тестовыми данными, но с реальными данными проблема остается: я не могу получить алфавитную сортировку. Это заставляет меня чесать голову, так как базовая структура фрейма данных выглядит одинаково. Ясно, что я что-то пропустил, но что ??

> str(mymelt)
'data.frame':   340 obs. of  3 variables:
 $ Industry: chr  "Animal and vegetable products" "Food and beverages" "Chemicals" "Plastic and rubber goods" ...
 $ variable: Factor w/ 17 levels "Other areas",..: 17 17 17 17 17 17 17 17 17 17 ...
 $ value   : num  0.000904 0.000515 0.007189 0.007721 0.000274 ...

Тем не менее, применяяwith оператор не приводит к уровням с алфавитной сортировкой.

> with(mymelt,factor(variable,levels = rev(sort(unique(variable)))))

  [1] USA                   USA                   USA                  
  [4] USA                   USA                   USA                  
  [7] USA                   USA                   USA                  
 [10] USA                   USA                   USA                  
 [13] USA                   USA                   USA                  
 [16] USA                   USA                   USA                  
 [19] USA                   USA                   Canada               
 [22] Canada                Canada                Canada               
 [25] Canada                Canada                Canada               
 [28] Canada                Canada                Canada    

Вплоть до:

 [334] Other areas           Other areas           Other areas          
 [337] Other areas           Other areas           Other areas          
 [340] Other areas

И если вы делаетеlevels() похоже, показывает то же самое:

 [1] "Other areas"           "Oceania"               "Africa"               
 [4] "Other Non-Eurozone"    "UK"                    "Other Eurozone"       
 [7] "Holland"               "Germany"               "Other Asia"           
[10] "Middle East"           "ASEAN-5"               "Singapore"            
[13] "HK/China"              "Japan"                 "South Central America"
[16] "Canada"                "USA"  

То есть необратимая версия вышесказанного.

Следующий снимок показывает, как выглядит график реальных данных. Как видите, ось X отсортирована, а ось Y - нет. Я в недоумении. Я что-то упустил, но не вижу, что это такое.

screenshot of plot with real data

Ответы на вопрос(4)

Ваш ответ на вопрос