ggplot中图例的自定义分组

时间:2017-07-05 00:02:32

标签: r ggplot2

在R中,我正在尝试创建一个自定义折线图,其中所有线条都显示在图表上,但图表的图例是自定义的,只显示两件事。

现在我的代码:

x = data.frame(runif(20),runif(20)*2,runif(20)*3)
names(x) = c("Run 1", "Run 2", "Run 3")
x$Avg = apply(x, 1, mean)
x$Step = row.names(x)
df = melt(x, id=c("Step"))
ggplot(df, aes(x=Step, y=value, group=variable, color=variable)) +
  geom_line()

结果:

enter image description here

我想让图表显示所有4行(运行1,2,3和平均值),但对于图例,我希望它能阅读" Avg"和"个人运行",其中" Avg"是我选择的任何颜色,每个"个人运行"是灰色或中性色。这种方式,当我有很多运行,我看到视觉上看到的数据,但图例不会离开屏幕。我该如何做到这一点?

2 个答案:

答案 0 :(得分:6)

我们可以使用subset函数,并使用对geom_line的两个不同调用指定颜色:

ggplot()+
    geom_line(data = subset(df, variable != 'Avg'),
              aes(x = Step, y = value, group = variable, colour = 'Individual Runs'))+
    geom_line(data = subset(df, variable == 'Avg'),
              aes(x = Step, y = value, colour = 'Avg', group = variable))+
    scale_colour_manual(values = c('Avg' = 'red', 'Individual Runs' = 'grey'))

enter image description here

答案 1 :(得分:1)

您可以将分组变量映射到只有两个级别的color。使用包 forcats 中的fct_other函数非常简单。

这会保留“平均”组,但将所有其他运行组合在一起,可以通过other_level设置。

library(forcats)
df$variable2 = fct_other(df$variable, keep = "Avg", other_level = "Individual Runs")

color使用新变量,保留variable的原始变量group。使用scale_color_manual设置颜色。

ggplot(df, aes(x = Step, y = value, group = variable, color = variable2)) +
     geom_line() +
     scale_color_manual(values = c("red", "grey") )

enter image description here