Как добавить метки полос к оси Y с помощью xyplot - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в xyplot в пакете решетки, и я пытаюсь визуализировать мой фрейм данных.Я хотел бы представить значения некоторой непрерывной переменной на оси x и пары факторных переменных на оси y (другими словами, вложенную переменную на оси y)

В: Как добавитьпользовательские надписи на оси Y?

Я прочитал документацию по мануалу и гуглил этот вопрос, пока решение не было найдено.Я ожидаю получить что-то вроде этого

enter image description here

Возможно ли получить такой тип графика с использованием xyplot?

Обновление

Действительно, ggplot2 может быть хорошим вариантом.Тем не менее, xyplot кажется более удобным, используя формулу y ~ x1 | x2, в то время как я не знаю, как сделать этот график.

Вот воспроизводимый пример

method<-rep(c("XGBM", "LGBM", "WGBM", "NNGBM"), times = 20)
Scenario<-as.factor(sort(rep(1:5, times = 16)))
scrooter<-as.factor(rep(c(50, 5, 0.5, 0.05), times = 5, each = 4))
measure<-rnorm(80)
data<-data.frame(measure, method, Scenario, scrooter)


str(data)

'data.frame':   80 obs. of  4 variables:
 $ measure : num  -1.181 -2.595 1.114 0.178 -1.246 ...
 $ method  : Factor w/ 4 levels "LGBM","NNGBM",..: 4 1 3 2 4 1 3 2 4 1 ...
 $ Scenario: Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ scrooter: Factor w/ 4 levels "0.05","0.5","5",..: 4 4 4 4 3 3 3 3 2 2 ...

мера: круги на графике и значения должны быть размещены на оси x.

метод: метки полосы сверху

Сценарий: метки полосы слева

scrooter: значениеразмещено на оси y

Обновление 2

Вот решение с использованием ggplot, но я ищу решение с использованием xyplot

cust_theme <- theme_bw() + 
  theme(legend.position="none", 
        panel.spacing.x = unit(0, "lines"), 
        panel.spacing.y = unit(0, "lines"),
        panel.grid = element_blank(),
        panel.border = element_rect(size = 0.25, color = "black"),
        strip.background.x = element_rect(fill = "wheat1"),
        strip.background.y = element_rect(fill = "lightgreen"),
        strip.text.x = element_text(margin = margin(1,0,1,0, "mm")),
        strip.text.y = element_text(margin = margin(0,1,0,1, "mm")),
        axis.title=element_text(size=14,face="plain"),
        axis.text.x = element_text(angle = 45, hjust = 1)
  )
point.plot<-ggplot(data = data, aes(x = measure, y = scrooter)) +
  geom_point(size = 3) +
  facet_grid(Scenario ~ method, switch = "y") +
  cust_theme +
  geom_vline(xintercept = 0, linetype="dotted", color = "black", size=0.5) +
  ylab("Scrooter") +
  geom_point(color = "white", size = 1.5)

enter image description here

1 Ответ

0 голосов
/ 22 мая 2019

Функция ключа useOuterStrips() доступна в пакете latticeExtra. Он работает на объекте с решеткой с ровно двумя условными переменными, как у вас здесь. Вы можете обернуть его вокруг вызова функции, как показано в первом примере, или, как более типично, применить функцию к сохраненному объекту решеток, как показано во втором примере.

# Starting with data as specified above
# Need latticeExtra, use two steps to build plot
  require(latticeExtra)

# Wrapped around a call to xyplot with two conditioning factors
  useOuterStrips(xyplot(scrooter ~ measure | method + Scenario, data,
    panel = function(...) {panel.refline(v = 0); panel.xyplot(...)}))

# More typically, and to more closely reproduce the example here
  obj <- xyplot(scrooter ~ measure | method + Scenario, data,
    panel = function(...) {panel.refline(v = 0); panel.xyplot(...)},
    scales = list(alternating = FALSE, tck = c(0.5, 0), col = "gray40",
      x = list(rot = 45)),
    as.table = TRUE, ylab = "Scrooter", col = 1)

# Apply useOuterStrips function
  useOuterStrips(obj)

useOuterStrips example

...