单个ggplot2中有多条数据线

时间:2019-01-25 00:44:35

标签: r ggplot2 plot

我想在单个ggplot中绘制多条线,其中每条线代表给定两个或多个参数的x和y之间的关系。

我知道如何针对一个参数进行操作

获取以下示例数据:

library(ggplot2)
library(reshape2)

rs = data.frame(seq(200, 1000, by=200), 
                runif(5), 
                runif(5), 
                rbinom(n = 5, size = 1, prob = 0.5)) 
names(rs) = c("x_", "var1", "var2", "par")

melted = melt(rs, id.vars="x_")

ggplot(data = melted, 
       aes(x = x_, y = value, group = variable, col = variable)) + 
  geom_point() + 
  geom_line(linetype = "dashed")

这将绘制三行,其中一行用于var1,一行用于var2,另一行用于par。

current

但是,我想要四行:一条用于 var1给定的par = 0 ,另一条用于 var1给定的par = 1 ,然后同样地代表var2。

例如,如果我希望条件是多个参数(例如par2 + par)的组合,该如何扩展?

2 个答案:

答案 0 :(得分:3)

如果您以其他方式融化数据,则可以使用par来更改线条的形状和线型,这样就很清楚了哪一条线是:

rs_melt = melt(rs, id.vars = c("x_", "par"))

ggplot(rs_melt, aes(x = x_, y = value, colour = variable, 
                    shape = factor(par), linetype = factor(par))) +
    geom_line(size = 1.1) +
    geom_point(size = 3) +
    labs(shape = "par", linetype = "par")

输出:

enter image description here

答案 1 :(得分:2)

您需要调整合并功能,并添加同时包含par和var详细信息的group列。我想以下是您想要的?

library(reshape)
library(ggplot2)
rs = data.frame(seq(200, 1000, by=200), runif(5), runif(5), rbinom(n = 5, size = 1, prob = 0.5))
names(rs)=c("x_", "var1", "var2", "par")

melted = melt(rs, id.vars=c("x_", "par"))
melted$group <- paste(melted$par, melted$variable)

ggplot(data=melted, aes(x=x_, y=value, group =group, col=group))+ geom_point() + geom_line(linetype = "dashed")