我是R的新手,我试图同时绘制两个时间序列线(当然使用不同的颜色),使用ggplot2.
我有2个数据帧.第一个具有'X'和'日期'列的百分比变化.第二个也有'Y'和'Date'列的百分比变化,即两个都有一个'Date'列具有相同的值,而'Percent Change'列有不同的值.
我想在单个图上使用ggplot2将'Percent Change'列与'Date'(两者共有)绘制.
我在网上找到的例子使用了具有不同变量的相同数据框来实现这一点,我无法找到任何利用2个数据帧来绘制图的东西.我不想将两个数据框绑定在一起,我想将它们分开.这是我正在使用的代码:
ggplot(jobsAFAM, aes(x=jobsAFAM$data_date, y=jobsAFAM$Percent.Change)) + geom_line() +
xlab("") + ylab("")
Run Code Online (Sandbox Code Playgroud)
但是这段代码只生成一行,我想在它上面添加另一行.任何帮助将非常感激.TIA.
The*_*Man 91
ggplot 允许你有多个图层,这就是你应该利用的地方.
在下面创建的图中,您可以看到有两个geom_line语句命中每个数据集并在一个图上将它们一起绘制.如果要添加任何其他数据集,绘图甚至是图表的特征(如轴标签),则可以扩展该逻辑.
library(ggplot2)
jobsAFAM1 <- data.frame(
data_date = runif(5,1,100),
Percent.Change = runif(5,1,100)
)
jobsAFAM2 <- data.frame(
data_date = runif(5,1,100),
Percent.Change = runif(5,1,100)
)
ggplot() +
geom_line(data = jobsAFAM1, aes(x = data_date, y = Percent.Change), color = "red") +
geom_line(data = jobsAFAM2, aes(x = data_date, y = Percent.Change), color = "blue") +
xlab('data_date') +
ylab('percent.change')
Run Code Online (Sandbox Code Playgroud)
Did*_*rts 38
如果这两个数据帧具有相同的列名,那么你应该添加一个数据帧中ggplot()的呼叫,并命名x和内y值aes()的ggplot()调用.然后geom_line()为第一行添加第一行并添加第二个geom_line()调用data=df2(其中df2是您的第二个数据帧).如果您需要使用不同颜色的线条,则color=在aes()每个线条中添加并命名为eahc线条geom_line().
df1<-data.frame(x=1:10,y=rnorm(10))
df2<-data.frame(x=1:10,y=rnorm(10))
ggplot(df1,aes(x,y))+geom_line(aes(color="First line"))+
geom_line(data=df2,aes(color="Second line"))+
labs(color="Legend text")
Run Code Online (Sandbox Code Playgroud)

小智 5
我更喜欢使用ggfortify图书馆.它是一个ggplot2包装器,可识别autoplot函数内的对象类型,并选择最佳的ggplot方法进行绘图.至少我不必记住ggplot2的语法.
library(ggfortify)
ts1 <- 1:100
ts2 <- 1:100*0.8
autoplot(ts( cbind(ts1, ts2) , start = c(2010,5), frequency = 12 ),
facets = FALSE)
Run Code Online (Sandbox Code Playgroud)

我知道这是旧的,但它仍然相关。您可以利用 reshape2::melt 将数据帧更改为更友好的 ggplot2 结构。
好处:
坏处:
例如:
jobsAFAM1 <- data.frame(
data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
Percent.Change = runif(5,1,100)
)
jobsAFAM2 <- data.frame(
data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
Percent.Change = runif(5,1,100)
)
jobsAFAM <- merge(jobsAFAM1, jobsAFAM2, by="data_date")
jobsAFAMMelted <- reshape2::melt(jobsAFAM, id.var='data_date')
ggplot(jobsAFAMMelted, aes(x=data_date, y=value, col=variable)) + geom_line()
Run Code Online (Sandbox Code Playgroud)