Plotting multiple variables from same data frame i

2019-05-31 07:24发布

This question already has an answer here:

I have a data set which could be defined thus:

Week <- c("2015_52", "2016_01", "2016_02", "2016_03", "2016_04")
y1 <- runif(5, 0, 1)
y2 <- runif(5, 0, 1)
y3 <- runif(5, 0, 1)
df <- data.frame(Week, y1, y2, y3)

I want to plot all three of the y's over time on the same ggplot (with manual colors and linetype for each one), but I'm new to ggplot and have not had to do this before. Trying to emulate answers to similar questions on StackOverflow is delivering errors.

For instance...

library(ggplot2)
ggplot(df, aes(x = Week, y = value, colour = variable)) + 
  geom_line()

...as in this question gives the error Error in eval(expr, envir, enclos) : object 'value' not found.

But trying as in the answer to this question...

ggplot() + 
  geom_line(data = df, 
            aes(x = Week, y = y1, 
                color = "black", linetype = "solid")) + 
  geom_line(data = df, 
            aes(x = Week, y = y2, 
                color = "red", linetype = "solid")) +
  geom_line(data = df,
            aes(x = Week, y = y3, 
                color = "orange", linetype = "dashed"))

...gives three instances of the error geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?. Can I get some assistance, please?

标签: r ggplot2
1条回答
时光不老,我们不散
2楼-- · 2019-05-31 08:07

Actually this is what you really want I think:

library(ggplot2)
library(reshape2)

set.seed(123)
Week <- c("2015_52", "2016_01", "2016_02", "2016_03", "2016_04")
y1 <- runif(5, 0, 1)
y2 <- runif(5, 0, 1)
y3 <- runif(5, 0, 1)
df <- data.frame(Week, y1, y2, y3)

mdf <- melt(df,id.vars="Week")

ggplot(mdf, aes( x=Week, y=value, colour=variable, group=variable )) + 
  geom_line() +
  scale_color_manual(values=c("y1"="black","y2"="red","y3"="orange")) +
  scale_linetype_manual(values=c("y1"="solid","y2"="solid","y3"="dashed"))

Note that leaving the group=variable out will cause the following dreaded message:

geom_path: Each group consists of only one observation. Do you need to adjust the group
aesthetic?

yielding:

enter image description here

查看更多
登录 后发表回答