在 ggplot (geom_line) 中手动调整线条颜色

时间:2021-04-18 04:40:13

标签: r ggplot2

我有一些数据要在 ggplot 中使用 geom_line 进行可视化。数据集中有两个类别,因此我为它们使用手动颜色黑色和红色。我还有每条移动平均线,这意味着我总共有四条线。

我面临的问题是图中的移动平均线不是很清楚,我想区分它们(最好使用颜色)。目前,我可以为两条移动平均线设置相同的颜色(例如黄色)或获取原始数据的颜色(红色和黑色)。

我想要做的是为移动平均线设置两种新颜色,并在图例中显示它们。 你能帮忙吗?

这是一个示例代码。

# rm(list = ls())
library(ggplot2)
X <- as.numeric(1:500)
df <- data.frame(x=X,y=rnorm(n=500,sd=.2)+sin(X*pi/110),gp=1)
for (i in 2) df <- rbind(df,data.frame(x=X,y=rnorm(n = 500,sd = .1)+sin(X*i*pi/200),gp=i))

### Classify as character ###
df$gp <- as.character(df$gp)

### Plot ###
ggplot(data = df,aes(x=x,y=y,group=gp,color=gp)) + 
  geom_line() + 
  geom_line(aes(y=rollmean(y, 15, na.pad=TRUE)), size=1, color="yellow") +
  theme_bw() +
  scale_colour_manual("", values = c("red", "black")) +
  guides(colour=guide_legend(title="Model"))

enter image description here

在此图中,我希望用两种新颜色显示两条黄线。 也欢迎其他有助于区分如此大数据集中的两条线的建议。

1 个答案:

答案 0 :(得分:0)

您可以创建具有移动平均值的新列,以长格式获取数据,然后进行绘图,以便获得所有 4 种颜色的图例。

library(tidyverse)
library(zoo)

df %>%
  group_by(gp) %>%
  mutate(moving_avg = rollmean(y, 15, na.pad=TRUE)) %>%
  ungroup %>%
  pivot_longer(cols = c(y, moving_avg)) %>%
  unite(col, name, gp) %>%
  ggplot(aes(x=x,y=value,color=col)) + 
  geom_line() + 
  theme_bw() +
  guides(colour=guide_legend(title="Model"))

enter image description here