Graphique avec ggplot2: "erreur: valeur discrète fournie à l'échelle continue" sur l'axe des Y catégorique

le code de pointage ci-dessous donne Error: Discrete value supplied to continuous scale

Qu'est-ce qui ne va pas avec ce code? Il fonctionne très bien jusqu'à ce que j'ai essayer de changer l'échelle de sorte que l'erreur est là... J'ai essayé de trouver des solutions à partir de problème similaire, mais ne pouvait pas.

Ceci est un head mes données:

> dput(head(df))
structure(list(`10` = c(0, 0, 0, 0, 0, 0), `33.95` = c(0, 0, 
0, 0, 0, 0), `58.66` = c(0, 0, 0, 0, 0, 0), `84.42` = c(0, 0, 
0, 0, 0, 0), `110.21` = c(0, 0, 0, 0, 0, 0), `134.16` = c(0, 
0, 0, 0, 0, 0), `164.69` = c(0, 0, 0, 0, 0, 0), `199.1` = c(0, 
0, 0, 0, 0, 0), `234.35` = c(0, 0, 0, 0, 0, 0), `257.19` = c(0, 
0, 0, 0, 0, 0), `361.84` = c(0, 0, 0, 0, 0, 0), `432.74` = c(0, 
0, 0, 0, 0, 0), `506.34` = c(1, 0, 0, 0, 0, 0), `581.46` = c(0, 
0, 0, 0, 0, 0), `651.71` = c(0, 0, 0, 0, 0, 0), `732.59` = c(0, 
0, 0, 0, 0, 1), `817.56` = c(0, 0, 0, 1, 0, 0), `896.24` = c(0, 
0, 0, 0, 0, 0), `971.77` = c(0, 1, 1, 1, 0, 1), `1038.91` = c(0, 
0, 0, 0, 0, 0), MW = c(3.9, 6.4, 7.4, 8.1, 9, 9.4)), .Names = c("10", 
"33.95", "58.66", "84.42", "110.21", "134.16", "164.69", "199.1", 
"234.35", "257.19", "361.84", "432.74", "506.34", "581.46", "651.71", 
"732.59", "817.56", "896.24", "971.77", "1038.91", "MW"), row.names = c("Merc", 
"Peug", "Fera", "Fiat", "Opel", "Volv"
), class = "data.frame")

le code de pointage:

## Plotting
meltDF = melt(df, id.vars = 'MW')
ggplot(meltDF[meltDF$value == 1,]) + geom_point(aes(x = MW, y = variable)) +
  scale_x_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) +
  scale_y_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200))

voici à quoi ressemblait la parcelle avant d'ajouter l'échelle:

Plot

22
demandé sur smci 2015-03-26 15:13:12

3 réponses

comme mentionné dans les commentaires, il ne peut pas être une échelle continue sur la variable du factor tapez. Vous pouvez modifier l' factornumeric comme suit, juste après avoir défini le meltDF variable.

meltDF$variable=as.numeric(levels(meltDF$variable))[meltDF$variable]

ensuite, exécutez le ggplot commande

  ggplot(meltDF[meltDF$value == 1,]) + geom_point(aes(x = MW, y =   variable)) +
     scale_x_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200)) +
     scale_y_continuous(limits=c(0, 1200), breaks=c(0, 400, 800, 1200))

Et vous aurez votre graphique.

Espérons que cette aide

26
répondu Nikos 2018-05-20 02:16:51

si x est numérique, puis ajouter scale_x_continuous(), si x c'est le caractère/facteur, puis ajouter scale_x_discrete(). Ça pourrait résoudre ton problème.

2
répondu yc_hello 2017-12-07 00:43:22

dans mon cas, vous devez convertir la colonne (vous pensez que cette colonne est numérique, mais en fait pas) en numeric

geom_segment(data=tmpp, 
   aes(x=start_pos, 
   y=lib.complexity, 
   xend=end_pos, 
   yend=lib.complexity)
)
# to 
geom_segment(data=tmpp, 
   aes(x=as.numeric(start_pos), 
   y=as.numeric(lib.complexity), 
   xend=as.numeric(end_pos), 
   yend=as.numeric(lib.complexity))
)
1
répondu Mitoxys 2018-03-26 09:54:33