ggplot2 error : Discrete value supplied to continuous scale
Now that we know the two color vars are of different types, there's the issue. You can try using a different scale for one (e.g. fill instead of color)
set.seed(123)
my_df1 <- data.frame(a=rnorm(100), b=runif(100), c=rep(1:10, 10))
my_df2 <- data.frame(a=rnorm(100), b=runif(100), c=factor(rep(LETTERS[1:5], 20)))
# this won't work. can't assign discrete and continuous to same scale
ggplot() +
geom_point(data=my_df1, aes(x=a, y=b, color=c)) +
geom_polygon(data=my_df2, aes(x=a, y=b, color=c), alpha=0.5)
Error: Discrete value supplied to continuous scale
# but use fill for polygons, and that works:
ggplot() +
geom_point(data=my_df1, aes(x=a, y=b, color=c)) +
geom_polygon(data=my_df2, aes(x=a, y=b, fill=c), alpha=0.5)
If you have to use the same scale (color), and can't convert the variables to the same type, see this for more info: Plotting continuous and discrete series in ggplot with facet
Evidently, you can't have different color aesthetics for two different geoms. As a workaround, use a fill aesthetic for the points instead. This means you have to use a point marker style that has a filled interior (see ?pch
and scroll down for the available point styles). Here's a way to do that:
ggplot() +
geom_point(data=merged,aes(x = pauseMedian, y = numTotalPauses, fill = diff),
pch=21, size=5, colour=NA) +
geom_polygon(data = splineHull,
mapping=aes(x=pauseMedian,
y=numTotalPauses,
colour = microstyle),
alpha=0)
Adding colour=NA
(outside of aes()
), gets rid of the default black border around the point markers. If you want a colored border around the points, just change colour=NA
to whatever colour you prefer.
Also see this thread from the ggplot2
Google group, discussing a similar problem and some workarounds.