scale_color_brewer(ggplot2)不会为所有行着色

时间:2017-09-13 15:44:30

标签: r ggplot2 colors

运行此ggplot2代码时:

ggplot(canine_lower, aes(x=x, y=y, colour=Teeth)) +
  geom_smooth(method="lm", formula= y~poly(x,4), se=FALSE) + 
  scale_color_grey(start=0.9, end=0.1)

由于scale_color_grey函数,我得到了这个图: enter image description here

所有牙齿组之间都会出现逐渐的灰色过渡(从1到16)。 但是,我想将其着色。出于这个原因,我使用了scale_color_brewer,但取得了部分成功。运行代码是:

ggplot(canine_lower, aes(x=x, y=y, colour=Teeth)) +
  geom_smooth(method="lm", formula= y~poly(x,4), se=FALSE)+
  scale_color_brewer(palette="Reds")

提供了这个未完成的情节: enter image description here

如上所示,从10到16没有颜色。

如何使用此功能跨越颜色范围?还有其他替代功能吗?

我必须说我尝试使用scale_color_gradient但没有成功。

2 个答案:

答案 0 :(得分:3)

来自brewer.pal(在包RColorBrewer中)的最大颜色数(用于生成颜色的函数scale_color_brewer)对于连续调色板为9。如果查看brewer.pal的帮助,可以检查每种调色板类型的最大颜色数。

您可以通过许多其他方式生成更大的调色板,例如{@ 1}},如@NateDay所示,或者使用下面的两个示例,但是很难在图中区分这么多不同的颜色。

scale_color_viridis

答案 1 :(得分:1)

您可以使用library(viridis)替代:

# a reproducible example
mtcars <- add_rownames(mtcars)
ggplot(mtcars, aes(mpg, hp, color = rowname)) +
  geom_point() +
  viridis::scale_color_viridis(discrete = TRUE)

enter image description here

scale_color_gradient()让您失望,因为它旨在用于映射到连续值,而不是离散值。