区分geom_point两组

distinguish geom_point by two groups

这是我目前得到的结果:

df<-data.frame(x=(1:100),
               y=rnorm(100),
               Mode=c(rep('Walk',25), rep('Bike',25), rep('Drive',25), rep('Train',25)),
               Location=c(rep(c(rep('City',10), rep('Rural',15)),4)))
ggplot(df)+geom_point(aes(x=x, y=y, col=Mode))+
  scale_color_brewer(palette='Set1')

我也想按Location来区分点,更具体地说,我想将每种颜色分为两种颜色,例如紫色为浅紫色和深紫色,以表示位置。

我该怎么办?

你至少有两个选择。一种是将颜色美感分配给数据框中模式和位置​​因素的交互,如下所示:

ggplot(df) + 
geom_point(aes(x=x, y=y, color=Mode:Location)) + 
scale_color_manual(values = c('Red', 'Pink', 'Blue', 'LightBlue', 
    'Green', 'LightGreen', 'Black', 'Grey'))

通过这种方法,ggplot 期望它找到的每个模式和位置​​组合都有一个唯一的颜色值,并且每个组合都与其他组合不同。因此,要按您想要的颜色进行分组,您必须手动定义您喜欢的颜色。

另一个选项如评论中所述,涉及将 alpha(透明度)美学分配给位置并将颜色美学设置为模式。这会自动给出您想要的颜色分组,但在我看来会创建更难解释的图例。

ggplot(df) + 
geom_point(aes(x=x, y=y, color=Mode, alpha=Location)) + 
scale_alpha_discrete(range = c(0.4, 1)) + 
scale_color_brewer(palette = 'Set1')

两个结果: