如何利用线符号在ColorBrewer调色板中回收颜色

8
我正在使用ggplot2创建许多facet_wrap的geom_line图。虽然每个图只有最多八条线,但一起看时,要显示的类别更多,大约有20个左右。
与此类似: 为13个或更多类别推荐比例颜色 和这个: 在R中,如何更改ggplot2的scale_fill_brewer中仅一个值的颜色值? 我想使用colorbrewer的高对比度颜色集来人工增加可以显示的颜色数量。
一个明显的方法是“回收”调色板中的颜色,每次使用不同的线符号。因此,带'x'的亮红色线可能是不同于带'o'的亮红色线的另一类别。
有人能想到我该怎么做吗?
谢谢!

这里提供一些经过清洗的数据以供使用,同时附上我用于生成图形的 R 代码。

数据: http://orca.casa.ucl.ac.uk/~rob/Stack%20Overflow%20question/stack%20overflow%20colours%20question%20data.csv

R 代码:

csvData <- read.csv("stack overflow colours question data.csv")
p <- ggplot(csvData, 
  aes(year, percentage_of_output, colour=category, group=category)) 
p + 
  geom_line(size=1.2)  + 
  labs(title = "Can I recycle the palette colours?", y = "% of output") +
  scale_colour_brewer(palette = "Set1") + 
  theme(plot.title = element_text(size = rel(1.5))) +
  facet_wrap("country_iso3", scales="free_y")

你能否稍微详细地解释一下你打算映射到颜色+线条样式的属性是什么? - krlmlr
也有一些数据可以使用会很好。 - Arun
没问题。马上呈现可复现的例子... - LondonRob
1个回答

16
创建了一个包含20个级别的数据框(以字母表示)。
df<-data.frame(group=rep(c(LETTERS[1:20]),each=5),x=rep(1:5,times=20),y=1:100)

你可以使用scale_colour_manual()来设置线条的颜色 - 在这个例子中,我使用了五个SET1并将它们重复四次(总数为20)。然后添加了geom_point()scale_shape_manual()来设置形状,并且使用了五种不同的形状,每种形状都重复了each四次(总数再次为20)。
library(RColorBrewer)
ggplot(df,aes(x,y,colour=group))+geom_line()+geom_point(aes(shape=group),size=5)+
  scale_colour_manual(values=rep(brewer.pal(5,"Set1"),times=4))+
  scale_shape_manual(values=rep(c(15,16,17,18,19),each=5))

enter image description here


太好了!完美的解决方案。谢谢! - LondonRob
如何在这样的组合图例中添加标签? - user4786271
@user4786271,请查看这个问题,那里列出了至少两个选项。 - tonytonov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接