Если вам необходимо различать среди множества (более 30) различных категорий, вам, вероятно, необходимо выполнить резервное копирование и потратить больше времени на стратегическое размышление о проекте: почти невозможно придумать набор из 30 цветов. ) rs, которые фактически различимы (особенно способом, который не зависит от платформы / канала рендеринга).
В принципе нет решения, которое будет работать с Set2
и более 30 цветами. Некоторые из палитр CB (Set3
и Paired
; library(RColorBrewer); display.brewer.all(n=12)
) допускают до 12 цветов.
edit : ОП хочет провести исследовательский анализ данных с хорошими различимыми цветами, которые не сломаются, если будет много категорий. Я хотел бы предложить что-то вроде этого:
library(RColorBrewer)
my.cols <- function(n) {
black <- "#000000"
if (n <= 9) {
c(black,brewer.pal(n-1, "Set2"))
} else {
c(black,hcl(h=seq(0,(n-2)/(n-1),
length=n-1)*360,c=100,l=65,fixup=TRUE))
}
}
library(ggplot2)
d <- data.frame(z=1:10)
g1 <- qplot(z,z,data=d,colour=factor(z))+opts(legend.position="none")
g1 + scale_colour_manual(values=my.cols(9))
g1 + scale_colour_manual(values=my.cols(10))
## check that we successfully recreated ggplot2 internals
## g1+scale_colour_discrete()
Я думаю, что это работает достаточно хорошо (вы можете заменить Set3
и отсечение 13 цветов, если хотите). Единственный недостаток (который я могу придумать) - это разрыв между участками с 9 и 10 цветами.
Придумать лучшее решение для выбора наборов из N различимых цветов программным способом будет довольно сложно ...