Zamawianie etykiet osi w geom_tile

Mam ramkę danych zawierającą dane dotyczące zamówień dla każdego z ponad 20 produktów z każdego z ponad 20 krajów. Umieściłem to w tabeli podświetlenia za pomocąggplot2 z kodem podobnym do tego:

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))

Który wytwarza taką fabułę:

Na prawdziwym wykresie tablica 450 komórek bardzo ładnie pokazuje „hotspoty”, w których skoncentrowane są zamówienia. Ostatnim udoskonaleniem, które chcę wdrożyć, jest uporządkowanie elementów zarówno na osi X, jak i na osi Y w kolejności alfabetycznej. Tak więc na powyższym wykresie oś y (variable) zostanie zamówione jakoall regions, americas, następnieeurope i oś x (industry) zostanie zamówioneall industries, cars isteel. W rzeczywistości oś X jest już uporządkowana alfabetycznie, ale nie wiedziałbym, jak to osiągnąć, gdyby tak nie było.

Czuję się nieco zawstydzony koniecznością zadawania tego pytania, ponieważ wiem, że jest wiele podobnych na SO, ale sortowanie i zamawianie w R pozostaje moją osobistą bugbear i nie mogę tego zrobić. Chociaż staram się, we wszystkich przypadkach z wyjątkiem najprostszych, zgubiłem się w rozmowachfactor, levels, sort, order iwith.

P. Jak mogę ustawić powyższą tabelę podświetlenia tak, aby zarówno oś y, jak i oś x były uporządkowane alfabetycznie?

EDIT: Odpowiedzi od smillig i joran poniżej rozwiązują pytanie z danymi testowymi, ale z prawdziwymi danymi problem pozostaje: nie mogę uzyskać sortowania alfabetycznego. To sprawia, że ​​drapam się po głowie, ponieważ podstawowa struktura ramki danych wygląda tak samo. Najwyraźniej coś pominąłem, ale co?

> 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 ...

Jednak zastosowaniewith instrukcja nie powoduje poziomów z sortowaniem alfabetycznym.

> 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    

Aż do:

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

A jeśli zrobiszlevels() wydaje się pokazywać to samo:

 [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"  

To jest nie odwrócona wersja powyższego.

Poniższe zdjęcie pokazuje, jak wygląda wykres rzeczywistych danych. Jak widać, oś X jest posortowana, a oś y nie. Jestem zakłopotany. Tęsknię za czymś, ale nie widzę, co to jest.

questionAnswers(4)

yourAnswerToTheQuestion