ggplot: colour points by groups based on user defined colours

谁说胖子不能爱 提交于 2019-11-27 22:25:52

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.

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))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!