【发布时间】:2019-12-19 16:22:39
【问题描述】:
我正在构建一个绘图,并且对 ggplot 定义的默认颜色顺序非常满意,例如:
library(ggplot2)
data(mtcars)
mtcars$brand <- gsub(' .*','',row.names(mtcars))
ggplot(mtcars,aes(x=mpg, y=hp, col=brand)) +
geom_point()
现在假设我想更改图例中的颜色顺序(在我的示例中,根据级别的频率 - 但可以是任何其他自定义顺序)。我知道的唯一方法是手动定义级别的顺序:
df.freq <- as.data.frame(table(mtcars$brand))
neworder <- order(-df.freq$Freq)
mtcars$brand <- factor(mtcars$brand, levels=df.freq$Var1[neworder])
它会生成所需的顺序,但也会更改颜色。
如果我绝对想保留原始颜色怎么办?
目前我只遇到了一个尴尬的解决方法,即手动重新创建默认调色板,然后重新排序并将这些颜色提供给scale_color_manual():
gg_color_hue <- function(n) { # code from https://stackoverflow.com/questions/8197559/
hues = seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
newcolors <- gg_color_hue(length(levels(mtcars$brand)))
newcolors <- newcolors[neworder]
ggplot(mtcars,aes(x=mpg, y=hp, col=brand)) +
geom_point()+
scale_color_manual(values = newcolors)
【问题讨论】: