【问题标题】:How to define pch and color based on columns in lattice plot如何根据点阵图中的列定义 pch 和颜色
【发布时间】:2019-08-24 12:15:49
【问题描述】:

我正在制作一个格子图,我想使用一列中的值来定义 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


    【解决方案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!

    【讨论】:

      【解决方案2】:

      这是你想要的吗?

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

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

      【讨论】:

      • 这几乎可以工作,但如果你绘制xyplot(mpg ~ wt | cyl, data=mtcars, groups = carb, auto.key = TRUE),那么你会看到第二个和第三个面板中的一个点应该是唯一的。这应该反映在您巧妙制作的情节中的 pch 中,但不是......任何其他帮助将不胜感激!
      • 我的意思是第二个和第三个面板中的一个点在所有面板中应该是唯一的。我认为正在发生的事情是根据每个面板中的顺序分配 pch,而不是所有数据。
      • 还尝试使用我想要的每个点的实际 pch 编号和颜色名称制作列,但我不知道如何正确引用它以使其反映在情节中。跨度>
      猜你喜欢
      • 2020-04-04
      • 1970-01-01
      • 2022-06-10
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多