在1中绘制两个折线图

时间:2016-05-30 07:22:37

标签: r plot graph ggplot2 timeserieschart

我有一个包含3列的数据框,名为x1y1ay1bx1是从2015-01-012015-04-30的日期序列。列y1ay1b包含与x1中每个日期对应的值。我想绘制一个图表,其中包含y1ay1bx1的线图,并提供标签。 我试过了

x1 <- seq(as.Date("2015-01-01"), as.Date("2015-04-30"), by = "day")
y1a <- rnorm(length(x1))
y1b <- rnorm(length(x1))

plot.co.one <- data.frame(x1, y1a, y1b)

require(ggplot2)

ggplot(plot.co.one, aes(x1)) + 
  geom_line(aes(y=y1a), colour = "red") +
  geom_line(aes(y=y1b), colour = "green")

但不知何故,它不会显示标签。

2 个答案:

答案 0 :(得分:0)

诀窍是将颜色映射(未设置)到变量,使其出现在图例中!

以下是一些示例数据集和图

library(ggplot2)

x1 <- seq(as.Date("2015-01-01"), as.Date("2015-04-30"), by = "day")
y1a <- rnorm(length(x1))
y1b <- rnorm(length(x1))

plot.co.one <- data.frame(x1, y1a, y1b)

ggplot(plot.co.one, aes(x = x1)) + 
  geom_line(aes(y = y1a, colour = "Line 1")) +
  geom_line(aes(y = y1b, colour = "Line 2")) +
  labs(colour = "Timeseries")

enter image description here

替代

作为替代方案,您始终可以将列合并为一个,然后绘制

library(tidyr)
library(dplyr)

alternative <- plot.co.one %>% 
  rename("Line 1" = y1a, "Line 2" = y1b) %>% 
  gather("Timeseries", "Value", `Line 1`:`Line 2`)

ggplot(alternative, aes(x = x1, y = Value, colour = Timeseries)) + 
  geom_line()

这给出了相同的结果(轴标签除外)。

答案 1 :(得分:-1)

我认为R不会将Date_2015识别为班级&#34;日期&#34;。
如果你改变&#34; x1&lt; - Date_2015&#34;进入&#34; x1&lt; - as.Date(Date_2015)&#34;,也许它会工作。

[编辑]抱歉,我无法理解你的问题。

library(ggplot2); library(tidyr)

# Using Mr. Manuel's code, thanks.
x1 <- seq(as.Date("2015-01-01"), as.Date("2015-04-30"), by = "day")
y1a <- rnorm(length(x1))
y1b <- rnorm(length(x1))
plot.co.one <- data.frame(x1, y1a, y1b)

# "key" becomes a col name, and a legend title. Value also becomes col name and ylab.
plot.co.one2 <- gather(plot.co.one, key="y1_ab", value = y1, -x1)
ggplot(plot.co.one2, aes(x = x1, y = y1, colour = y1_ab)) + geom_line() + 
  scale_colour_manual(values = c("red", "green"))

plot