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

问题描述 投票:1回答:2

我正在制作格子图,我想使用一列中的值来定义pch,使用另一列来定义点的颜色。就像是:

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

第二和第三个面板中有独特的pch点,但这些点在图中是唯一的,而不是在所有图中(因为它们应该是)。如果您使用以下代码,则可以看到此内容:

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

这个图对于一个组来说看起来很棒,但是如果你尝试调用两个组,它只需要对这两个变量进行独特的组合,并将它们绘制成唯一的颜色。

导致此解决方案出现问题的问题以及下面作为答案提供的问题是,并非每个组中的每个值都存在于每个面板中,并且它们几乎从不以相同的顺序存在。我的实际数据文件非常大,并且不可能从这个混乱中解脱出来。如果我可以只使用列中的值来实际定义整个绘图的颜色或pch,而不仅仅是每个面板,那将是最好的。 R只是假设每个面板中新值的顺序应该定义pch或颜色的变化。

r lattice
2个回答
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
投票

@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)
          }
)

这显然是一个实际的解决方案,它对数据框的排序很有用。此答案由另一个论坛上的用户提供。谢谢Peter Langfelder!

这是另一个解决方案,感谢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为那个!

© www.soinside.com 2019 - 2024. All rights reserved.