Как я могу назначить разные символы для разных групп в решетке? - PullRequest
2 голосов
/ 17 февраля 2012

Скажем, у меня есть 3 группы с 3 точками в каждой на графике, и мне нужна черно-белая версия, где 3 точки из 3 групп отображаются с разными символами. Как мне указать функцию panel.superpose?

http://www.r -bloggers.com / рабочий-с темами-в-решеточной-графика / http://stat.ethz.ch/R-manual/R-devel/library/lattice/html/panel.superpose.html

Ответы [ 3 ]

11 голосов
/ 17 февраля 2012

Я склонен использовать ту же общую стратегию, изложенную в сообщении в блоге, на которое вы ссылаетесь.

Начиная с standard.theme(), вы можете вносить изменения в настройки, пока у вас не будет настроенной темы, которая наилучшим образом соответствует вашим потребностям. Если у вас есть что-то, что вам нравится, вы можете просто подключить его через аргумент par.settings всякий раз, когда захотите его использовать.

library(lattice)
# Start work on your own black-and-white theme
myTheme <- standard.theme(col = FALSE)
myTheme$superpose.symbol$pch <-1:7

# These are the kinds of commands you can use to explore the list of available
# settings as well as their current settings.
names(myTheme)
myTheme$superpose.symbol

# Compare the results of your own theme to those produce by lattice's
# default settings.
library(gridExtra)
p1 <- xyplot(Sepal.Length ~ Petal.Length, group= Species, data = iris,
             main = "lattice's default theme")
p2 <- xyplot(Sepal.Length ~ Petal.Length, group= Species, data = iris,
             par.settings = myTheme,
             main = "My customized theme")
grid.arrange(p1, p2, ncol=2)

enter image description here

3 голосов
/ 17 февраля 2012

Там может быть более простой способ (я не очень знаком с решеткой), но:

library(lattice)
df <- data.frame(x = rnorm(9), y = rnorm(9), z= letters[1:3])

xyplot(x~y,data=df,groups=z,
       par.settings=list(superpose.symbol=list(pch=1:3,
                                               col='black')))
2 голосов
/ 02 декабря 2015

Вот еще одно решение, основанное на panel.superpose, на которое вы ссылаетесь в своем вопросе:

library(lattice)
xyplot(Sepal.Length ~ Petal.Length, groups = Species, data = iris,
panel = function(x,y,...){
    panel.superpose(x,y,..., pch=list("A","O","X"))
})

дает следующий вывод: panel_superpose_example

lattice использует первичные переменные (определяют основной дисплей), условные переменные (определяют подгруппы, расположенные рядом на разных панелях) и группирующие переменные (определяют наложенные подгруппывнутри панелей).

Формула Sepal.Length ~ Petal.Length и оператор группировки groups = Species указывают данные, которые должны быть нанесены на график, и передают их panel который контролирует черчение.Если groups! = NULL panel.superpose, то i-й элемент списка, присвоенный pch, переходит на i-й уровень groups.

Используя ... для panel и panel.superpose, можно избежать определения всех аргументов функции и указать только те из них, которые необходимо настроить.

pars.settings присоединяет пользовательские настройки к определеннымобъект, в отличие от lattice.options, который влияет на настройки глобально.

...