ggplot中的散点图,具有特定的颜色集。如何获得传奇权利?

时间:2017-10-26 09:17:37

标签: r ggplot2 legend

所以我想在散点图中引入更多样化的颜色模式,因为我有高n并且标准集的辨别属性不够高。所以,我已经生成了一个有效的颜色矢量,但现在我无法正确地获得传奇。我要么没有传说,也没有带有颜色名称的传奇。我很确定我正在混淆美学和属性,但我不知道自己做错了什么。

我的代码和三次尝试如下。我想要实现的是与我创建的颜色矢量(col_sample)匹配的颜色,但是匹配数据框中名称列的图例的名称。

#dataframe
df1 <- data.frame(name = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e"),
             n = rep(1:31, 1),
             value = rep(31:1, 1))

df1$name <- as.factor(df1$name)


#produce color vector
color <- grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)] 
col_sample <- sample(color, 31)
col_sample <- as.vector(col_sample) 


#scatterplot
median_scatter <- ggplot(data = df1,
                     aes(x = n, 
                         y = value,
                         col = name))

#try 1: these colors are too similar
median_scatter +
  geom_point() 

#try 2: t he legend dissappears
median_scatter +
  geom_point(col = col_sample) 

#try 3: t he legend dissappears
median_scatter +
  geom_point(aes(col = col_sample))

1 个答案:

答案 0 :(得分:2)

您可以使用scale_colour_manual手动定义色阶。

median_scatter <- ggplot(data = df1,
                     aes(x = n, 
                     y = value,
                     colour = name))
median_scatter + 
  geom_point() +
  scale_colour_manual(values=col_sample)

请注意,legendaes相关联。在试验#2中,您通过在aes(col=name)中为ggplot指定颜色矢量来覆盖父col中的颜色美学geom_pointnamecol_sample之间没有关联,因此没有传说。

在尝试#3中,您已重新分配aes(col=col_sample),因此颜色名称现在变为分配给默认颜色的变量。