如何根据格子图中的列定义pch和颜色

时间:2019-04-03 04:37:33

标签: r lattice

我正在制作点阵图,我想使用一列中的值定义pch,另一列中的值定义点的颜色。像这样:

xyplot(mpg ~ wt | cyl,
       data=mtcars,
       col = gear,
       pch = carb)

第二个和第三个面板中有唯一的pch点,但是这些点仅在图中是唯一的,而在所有图中都不是唯一的(应该如此)。如果使用以下代码,您会看到此信息:

xyplot(mpg ~ wt | cyl, 
       data=mtcars, 
       groups = carb
)

此图对于一组非常好,但是,如果您尝试调用两个组,则只需采用这两个变量的唯一组合并将其绘制为唯一的颜色即可。

此解决方案和下面提供解决方案的一个问题是,并非每个小组的每个值都出现在每个面板中,并且它们几乎永远不会以相同的顺序出现。我的实际数据文件非常大,无法解决这种混乱情况。最好是只使用一列中的值为整个绘图而不只是每个面板实际定义颜色或pch。 R只是假设每个面板中新值的顺序应定义pch或颜色的变化。

2 个答案:

答案 0 :(得分:1)

这是您想要的吗?

mypch <- 1:6 
mycol <- 1:3

with(mtcars, 
     xyplot(mpg ~ wt | cyl, 
            panel = function(x, y, ..., groups, subscripts) { 
              pch <- mypch[factor(carb[subscripts])] 
              col <- mycol[factor(gear[subscripts])] 
              grp <- c(gear,carb) 
              panel.xyplot(x, y, pch = pch, col = col) 

            } 
     )  ) 

enter image description here

来源:http://r.789695.n4.nabble.com/lattice-xyplot-with-one-factor-for-points-and-another-for-lines-td2333461.html

答案 1 :(得分:1)

对@LocoGris给出的答案的小修改。

xyplot(mpg ~ wt | cyl,
          panel = function(x, y, ..., groups, subscripts) {
              pch <- mypch[factor(carb)[subscripts]]
              col <- mycol[factor(gear)[subscripts]]
              grp <- c(gear,carb)
              panel.xyplot(x, y, pch = pch, col = col)
          }
)

这显然是一个实际的解决方案,并且对数据帧进行排序非常可靠。该答案由另一个论坛上的用户提供。谢谢彼得·朗费尔德!

这是r-help电子邮件列表的另一种解决方案:

xyplot(mpg ~wt|cyl, data = mtcars,
      col = mtcars$gear,
      pch = mtcars$carb,
      panel = function(x,y, subscripts, col, pch,...)
      {
         panel.xyplot(x,y, col = col[subscripts], pch = pch[subscripts] )
      }
)

感谢伯特·冈特(Bert Gunter)!