gráfico de barras agrupado: encomende o eixo x e mantenha a largura constante da barra, em caso de falta de níveis

Aqui está o meu script (exemplo inspirado emaqui e usando oreorder opção deaqui):

library(ggplot2)
Animals <- read.table(
  header=TRUE, text='Category        Reason Species
1   Decline       Genuine      24
2  Improved       Genuine      16
3  Improved Misclassified      85
4   Decline Misclassified      41
5   Decline     Taxonomic       2
6  Improved     Taxonomic       7
7   Decline       Unclear      10
8  Improved       Unclear     25
9  Improved           Bla     10
10  Decline         Hello     30')

fig <- ggplot(Animals, aes(x=reorder(Animals$Reason, -Animals$Species), y=Species, fill = Category)) + 
  geom_bar(stat="identity", position = "dodge")

Isso fornece o seguinte gráfico de saída:

O que eu gostaria é pedir meu barplot na condição 'Recusar', e todos os 'Melhorados' não seriam inseridos no meio. Aqui está o que eu gostaria de obter (depois de alguma edição svg):

Portanto, agora toda a condição 'Recusar' é classificada e a condição 'Melhorado' vem depois. Além disso, idealmente, todas as barras teriam a mesma largura, mesmo que a condição não seja representada para o valor (por exemplo, "Bla" não tem valor "Recusar").

Alguma idéia de como eu poderia fazer isso sem ter que jogar com editores SVG? Muito Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion