是否有一种方法可以覆盖scale_colour_manua名称

时间:2016-01-19 10:22:58

标签: r ggplot2 statistics

我的代码是

myColors <- brewer.pal(5,"Set1")
names(myColors) <- levels(software_length$type)
colScale <- scale_colour_manual(values = myColors,name="Software")

在我的ggplot中,我使用了这个定义的手动颜色colScale,比如

 ggplot(data, aes(efficiency)) + theme_gray() + colScale 

但我想将名称从软件更改为类型,我尝试使用 scale_color_discrete(name="type")但这会覆盖颜色并给我完全不同的颜色 它会发出这个警告;

  

'color'的比例已经存在。添加另一个比例   'color',它将取代现有的规模。

任何想法?

2 个答案:

答案 0 :(得分:2)

您可以使用参数colScale

更新name的名称
colScale$name<-"type"

如果您不想全局更改,请使用其他名称保存,然后更新

colScale2<-colScale
colScale2$name<-"type"

答案 1 :(得分:1)

另一种选择是将自定义比例重新定义为函数:

myColors <- brewer.pal(5,"Set1")
names(myColors) <- levels(software_length$type)

my_col_scale <- function(name = "Software", ...) {
    scale_colour_manual(values = myColors, name = name, ...))
}

这样,默认名称将为"Software",但您可以按正常方式调整(或任何其他scale_colour_manual设置)。

ggplot(data, aes(efficiency)) + 
  theme_gray() +
  my_col_scale(name = "type")

您可能也对scale_color_brewer感兴趣......您的比例基本上是scale_color_brewer(palette = 1, name = "Software"),但只有在有5个级别时才有效(而scale_color_brewer在数量上会灵活水平)。

使用scale_color_brewer的两个例子:

# the `cut` column has 5 levels
ggplot(head(diamonds, 200), aes(x = carat, y = price, color = cut)) +
    geom_point() +
    scale_color_brewer(palette = 1)

# the `clarity` column has 7 levels
# scale_color_brewer makes the change automatically
ggplot(head(diamonds, 200), aes(x = carat, y = price, color = clarity)) +
    geom_point() +
    scale_color_brewer(palette = 1)