De onderstaande plotcode geeft Error: Discrete value supplied to continuous scale
Wat is er mis met deze code? Het werkt prima totdat ik de schaal probeer te veranderen, dus de fout is daar … Ik heb geprobeerd oplossingen te vinden voor een soortgelijk probleem, maar dat lukte niet.
Dit is een head
van mijn gegevens:
> 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")
De plotcode:
## 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))
Zo zag de plot eruit voordat de schaal werd toegevoegd:
Antwoord 1, autoriteit 100%
Zoals vermeld in de opmerkingen, kan er geen continue schaal zijn op een variabele van het type factor
. U kunt de factor
als volgt wijzigen in numeric
, net nadat u de variabele meltDF
heeft gedefinieerd.
meltDF$variable=as.numeric(levels(meltDF$variable))[meltDF$variable]
Voer vervolgens de opdracht ggplot
uit
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))
En je hebt je kaart.
Hopelijk helpt dit
Antwoord 2, autoriteit 41%
als x
numeriek is, voeg dan scale_x_continuous()
toe; als x
teken/factor is, voeg dan scale_x_discrete()
toe. Dit zou je probleem kunnen oplossen.
Antwoord 3, autoriteit 8%
In mijn geval moet je de kolom (je denkt dat deze kolom numeriek is, maar eigenlijk niet) converteren naar 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))
)