Ordenando os rótulos dos eixos no geom_tile

Eu tenho um quadro de dados contendo dados do pedido para cada um dos mais de 20 produtos de cada um dos mais de 20 países. Eu coloquei em uma tabela de destaque usandoggplot2 com código semelhante a este:

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

Que produz um enredo como este:

Na trama real, a tabela de 450 células mostra muito bem os 'hotspots' onde os pedidos estão concentrados. O último refinamento que quero implementar é organizar os itens nos eixos x e y em ordem alfabética. Então, no gráfico acima, o eixo y (variable) seria encomendado comoall regions, americas, entãoeurope e o eixo x (industry) seria encomendadoall industries, cars esteel. Na verdade, o eixo x já está ordenado alfabeticamente, mas eu não saberia como conseguir isso se já não fosse o caso.

Eu me sinto um pouco envergonhado por ter que fazer essa pergunta, pois sei que há muitos similares no SO, mas a classificação e a ordenação em R continua sendo meu bugbear pessoal e não consigo fazer isso funcionar. Embora eu tente, em todos os casos, exceto os mais simples, eu me perdi em um monte de chamadas parafactor, levels, sort, order ewith.

Q. Como posso organizar a tabela de realce acima para que os eixos y e x sejam ordenados alfabeticamente?

EDIT: As respostas de smillig e joran abaixo resolvem a questão com os dados de teste, mas com os dados reais, o problema permanece: não consigo obter um tipo alfabético. Isso me deixa coçando a cabeça, já que a estrutura básica do quadro de dados é a mesma. Claramente eu omiti algo, mas o que?

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

No entanto, aplicando owith instrução não resulta em níveis com uma classificação alfabética.

> 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    

Todo o caminho até:

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

E se você fizer umlevels() parece mostrar a mesma coisa:

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

Ou seja, a versão não invertida do acima.

A foto a seguir mostra como é a plotagem dos dados reais. Como você pode ver, o eixo x é classificado e o eixo y não. Estou perplexo Eu estou sentindo falta de algo, mas não consigo ver o que é.

questionAnswers(4)

yourAnswerToTheQuestion