Как определить pch и цвет на основе столбцов в решетчатом графике - PullRequest
1 голос
/ 03 апреля 2019

Я строю решетчатый график и хотел бы использовать значение в одном столбце, чтобы определить pch, а в другом столбце - цвет точек. Что-то вроде:

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

На второй и третьей панелях есть уникальные точки pch, но эти точки уникальны только внутри графиков, а не среди всех графиков (как и должно быть). Это можно увидеть, если использовать следующий код:

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

Этот график отлично подходит для одной группы, но если вы попытаетесь вызвать две группы, он просто берет уникальные комбинации этих двух переменных и отображает их как уникальные цвета.

Проблема, вызывающая проблемы с этим решением, и проблема, предоставленная в качестве ответа ниже, заключается в том, что не все значения для каждой группы присутствуют в каждой панели, и они почти никогда не находятся в одном и том же порядке. Мой фактический файл данных очень большой, и я не могу выбраться из этого беспорядка. Было бы лучше, если бы я мог просто использовать значение в столбце, чтобы фактически определить цвет или pch для всего графика, а не только для каждой панели. R просто предполагает, что порядок новых значений в каждой панели должен определять изменение цвета или цвета.

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Небольшое редактирование ответа, данного @ 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] )
      }
)

Спасибо Берт Гюнтер за это!

1 голос
/ 03 апреля 2019

Это то, что вы хотите?

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

...