【问题标题】:How to plot two lines by factor in a trellis graph?如何在格子图中按因子绘制两条线?
【发布时间】:2011-10-15 02:11:21
【问题描述】:

定义:

df <- data.frame(
        line1 = rep(seq(1,5,by=1),2), 
        line2 = rep(seq(2,6,by=1),2),
        index = rep(seq(1,5,by=1),2),
        factor=rep(c("a","b"),each=5))

其中line1line2 是两个变量,比如身高和体重。

这是我想要的每个面板的简单样式(我也想更改点标记的大小,但不使用方式):

plot(df$line1[df$factor=="a"], type = "o", ylim=c(0,6))
lines(df$line2[df$factor=="a"], type = "o", lty=2, pch=0)

当我尝试这个时:

library(lattice)
xyplot(c(line1,line2)~index|factor,data=df,type="o")

程序将所有点视为属于同一行。

此外,我不确定如何输入绘图样式的参数以获得所需的结果。

PS1。令人惊讶的是,我搜索了很多散点图(具有线性拟合、密度等)和格子图的直方图示例,但这不是我想做的简单事情之一。

PS2。我想标记这个问题trellis,但没有声誉点来创建标记。有志愿者吗?

【问题讨论】:

  • 标签已创建。我还把格子改成了格子,因为库叫做格子

标签: r ggplot2 lattice trellis


【解决方案1】:

答案其实很简单。不用将 line1 和 line2 组合成一个向量,只需使用 xyplot 的扩展公式接口即可:

xyplot(line1+line2~index|factor,data=df,type="o")

给:

还要检查?xyplot 阅读大量文本,并与那里的示例一起玩一下。您将了解如何使用标题、图例等自定义它。

正如您也标记为 ggplot2 一样,这是使用该软件包完成它的一种可能性:

require(ggplot2)
require(reshape)
df2 <- melt(df,id=c("index","factor"))

qplot(index,value,variable,facets = .~factor ,
          data=df2,geom="line",colour=variable)

给:

【讨论】:

  • 谢谢!我确实浏览了?xyplot 中的“大量文本”。不幸的是,简单的东西在途中丢失了......
  • 感谢ggplot 示例。当我查看 Hadley 的包装网页时,我得到的印象是我必须重塑数据。我发现这令人惊讶:这不是通常存储数据的方式。此外,颜色看起来不错,但对于工作文件,我们通常仅限于黑白。能够设置黑白约束会很好,所以调色板只有灰色阴影。
  • @Fred :在 xyplot 中使用 col=c("black","grey") 参数或在 qplot 之后使用 + scale_colour_manual(values=c("black","grey"))。再次查看帮助文件。对于 xyplot,您可能还想查看?panel.xyplot
  • 至于重塑数据:是的,您确实必须重塑数据,但 Hadley 提供的工具让这一切变得简单。如果您要使用黑色和灰色线条,您可能需要使用+theme_bw() ...
【解决方案2】:

或者,您可以融合数据并使用group

library(reshape)
df2 <- melt(df,id.var=3:4)
xyplot(value~index|factor,data=df2,type="o",group=variable)

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多