Plot two graphs in same plot in R
我想在同一个图中绘制y1和y2。
1 2 3 4 5 | x <- seq(-2, 2, 0.05) y1 <- pnorm(x) y2 <- pnorm(x, 1, 1) plot(x, y1, type ="l", col ="red") plot(x, y2, type ="l", col ="green") |
但是,当我这样做的时候,它们并没有被绘制在同一个地块中。
在Matlab中,可以做
1 2 | plot(x,y1,type="l",col="red") lines(x,y2,col="green") |
您也可以使用
1 2 3 | plot( x, y1, type="l", col="red" ) par(new=TRUE) plot( x, y2, type="l", col="green" ) |
如果您在
在构建多层图时,应考虑
1 2 3 4 5 | # Data generation x <- seq(-2, 2, 0.05) y1 <- pnorm(x) y2 <- pnorm(x,1,1) df <- data.frame(x,y1,y2) |
基本解决方案
1 2 3 4 5 | require(ggplot2) ggplot(df, aes(x)) + # basic graphical object geom_line(aes(y=y1), colour="red") + # first layer geom_line(aes(y=y2), colour="green") # second layer |
这里
使用
1 2 3 4 | g <- ggplot(df, aes(x)) g <- g + geom_line(aes(y=y1), colour="red") g <- g + geom_line(aes(y=y2), colour="green") g |
1 2 | g <- g + ylab("Y") + xlab("X") g |
最终
更新(2013-11-08):
正如评论中所指出的,
您可以参考此答案https://stackoverflow.com/a/19039094/1796914以查看相应的代码。
我认为您正在寻找的答案是:
1 2 | plot(first thing to plot) plot(second thing to plot,add=TRUE) |
使用
1 | matplot(x, cbind(y1,y2),type="l",col=c("red","green"),lty=c(1,1)) |
如果
或者,如果两条线没有相同的x坐标,请在第一个图上设置轴限制并添加:
1 2 3 4 5 6 7 | x1 <- seq(-2, 2, 0.05) x2 <- seq(-3, 3, 0.05) y1 <- pnorm(x1) y2 <- pnorm(x2,1,1) plot(x1,y1,ylim=range(c(y1,y2)),xlim=range(c(x1,x2)), type="l",col="red") lines(x2,y2,col="green") |
我很惊讶这个Q已经4岁了,没人提到
tl; dr:您想使用
我不同意
输出
看看垂直轴标签是多么混乱!由于范围不同,您需要设置
总是让我对绘图感到困惑的是
这是
这里有一个小的区别:
这是调用
在幕后,查看
如@redmode所述,您可以使用
在这种情况下,我们可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | library(ggplot2) library(reshape2) # original data in a 'wide' format x <- seq(-2, 2, 0.05) y1 <- pnorm(x) y2 <- pnorm(x, 1, 1) df <- data.frame(x, y1, y2) # melt the data to a long format df2 <- melt(data = df, id.vars ="x") # plot, using the aesthetics argument 'colour' ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line() |
如果您使用基本图形(即非格子/网格图形),则可以使用点/线/多边形函数模拟MATLAB的保持特征,以便在不创建新图的情况下向图中添加其他详细信息。对于多画布布局,您可以使用
如果你想分割屏幕,你可以这样做:
(例如,下面的2个图)
1 2 3 4 5 | par(mfrow=c(1,2)) plot(x) plot(y) |
参考链接
你可以使用点作为上图,即。
1 2 3 | plot(x1, y1,col='red') points(x2,y2,col='blue') |
而不是将值保存在数组中,而是将它们存储在矩阵中。默认情况下,整个矩阵将被视为一个数据集。但是,如果向绘图添加相同数量的修改器,例如col(),因为矩阵中有行,R将确定应该独立处理每一行。例如:
1 2 3 | x = matrix( c(21,50,80,41), nrow=2 ) y = matrix( c(1,2,1,2), nrow=2 ) plot(x, y, col("red","blue") |
除非您的数据集具有不同的大小,否则这应该有效。
习惯用法Matlab
1 2 3 4 5 6 7 8 9 | x1 <- seq(1,10,.2) df1 <- data.frame(x=x1,y=log(x1),type="Log") x2 <- seq(1,10) df2 <- data.frame(x=x2,y=cumsum(1/x2),type="Harmonic") df <- rbind(df1,df2) library(ggplot2) ggplot(df)+geom_line(aes(x,y,colour=type)) |
灵感来自婷婷赵的双线图,具有不同的x轴范围使用ggplot2。
您还可以使用ggvis创建绘图:
1 2 3 4 5 6 7 8 9 10 11 | library(ggvis) x <- seq(-2, 2, 0.05) y1 <- pnorm(x) y2 <- pnorm(x,1,1) df <- data.frame(x, y1, y2) df %>% ggvis(~x, ~y1, stroke := 'red') %>% layer_paths() %>% layer_paths(data = df, x = ~x, y = ~y2, stroke := 'blue') |
这将创建以下图:
您可以使用plotly包中的
1 2 3 4 5 6 7 8 9 | # call Plotly and enter username and key library(plotly) x <- seq(-2, 2, 0.05) y1 <- pnorm(x) y2 <- pnorm(x, 1, 1) plot_ly(x = x) %>% add_lines(y = y1, color = I("red"), name ="Red") %>% add_lines(y = y2, color = I("green"), name ="Green") |
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | library(plotly) x <- seq(-2, 2, 0.05) y1 <- pnorm(x) y2 <- pnorm(x, 1, 1) df=cbind.data.frame(x,y1,y2) plot_ly(df) %>% add_trace(x=~x,y=~y1,name = 'Line 1',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE) %>% add_trace(x=~x,y=~y2,name = 'Line 2',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE,yaxis ="y2") %>% layout(title = 'Title', xaxis = list(title ="X-axis title"), yaxis2 = list(side = 'right', overlaying ="y", title = 'secondary y axis', showgrid = FALSE, zeroline = FALSE)) |
工作演示的截图:
我们也可以使用格子库
1 2 3 4 5 | library(lattice) x <- seq(-2,2,0.05) y1 <- pnorm(x) y2 <- pnorm(x,1,1) xyplot(y1 + y2 ~ x, ylab ="y1 and y2", type ="l", auto.key = list(points = FALSE,lines = TRUE)) |
对于特定的颜色
1 | xyplot(y1 + y2 ~ x,ylab ="y1 and y2", type ="l", auto.key = list(points = F,lines = T), par.settings = list(superpose.line = list(col = c("red","green")))) |