I am trying to define the colours of groups of points plotted in ggplot. I adapted code from this post:
Color ggplot points based on defined color codes
but
It works if you use unique
and as.character
:
ggplot(data = df, aes(col, D, colour = zone))+
geom_point() +
scale_colour_manual(breaks = df$zone,
values = unique(as.character(df$color.codes)))
Sven beat me by a few secs, but slightly different:
df.unique <- unique(df[, c("zone", "color.names")])
p + scale_colour_manual(breaks = df.unique$zone, values = as.character(df.unique$color.names))
You are somewhere between two different solutions.
One approach is to not put the colors into the df
data frame and specify the mapping between zone
and desired color in the scale call:
ggplot(data=df, aes(col, D, colour = zone))+
geom_point() +
scale_colour_manual(values=setNames(color.codes, zone))
Note that this does not use color.codes
or color.names
from df
, nor does it use df2
directly (though it does use the columns that are used to make df2
; if you have something like df2
and not the columns separately, you can use setNames(df2$color.codes, df2$zone)
instead).
The other approach maps color directly to the color codes and uses scale_color_identity
, but then has to go through some additional labeling to get the legend right.
ggplot(data=df, aes(col, D, colour = color.codes)) +
geom_point() +
scale_colour_identity("zone", breaks=color.codes, labels=zone, guide="legend")
The first is, in my opinion, the better solution.