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