объединение stripplot и boxplot в R [дубликат]

Я думаю, что лучший способ определить, является ли массив пустым или нет, использовать count () следующим образом:

if(count($array)) {
    return 'anything true goes here';
}else {
    return 'anything false'; 
}
57
задан Chris 29 March 2010 в 18:58
поделиться

3 ответа

Пакет Lattice часто (но не всегда) игнорирует команду par , поэтому я просто не использую ее при построении w / Lattice .

Поместить несколько графиков решетки на одну страницу:

  • создать (но не строить) график решетки / решетки объекты , затем
  • вызывать печатать один раз для каждого графика
  • для каждого вызова print , передать аргументы для (i) график ; (ii) больше , установлен на TRUE и который передается только для начального вызова print и (iii) pos , который дает положение каждого графика на странице, заданной как координатные пары xy для нижнего левого угла графика и верхнего правого угла соответственно, т. е. вектора с четырьмя числами.

гораздо проще показать, чем сказать:

data(AirPassengers)     # a dataset supplied with base R
AP = AirPassengers      # re-bind to save some typing

# split the AP data set into two pieces 
# so that we have unique data for each of the two plots
w1 = window(AP, start=c(1949, 1), end=c(1952, 1))
w2 = window(AP, start=c(1952, 1), end=c(1960, 12))

px1 = xyplot(w1)
px2 = xyplot(w2)

# arrange the two plots vertically
print(px1, position=c(0, .6, 1, 1), more=TRUE)
print(px2, position=c(0, 0, 1, .4))
40
ответ дан doug 21 August 2018 в 08:05
поделиться

Пакет «решетка» построен на пакете сетки и прикрепляет пространство имен при загрузке «решетки». Однако, чтобы использовать функцию grid.layout, вам нужно явно load() pkg :: grid. Другой альтернативой, которая, вероятно, проще, является функция grid.arrange в pkg :: gridExtra:

 install.packages("gridExtra")
 require(gridExtra) # also loads grid
 require(lattice)
 x <- seq(pi/4, 5 * pi, length.out = 100)
 y <- seq(pi/4, 5 * pi, length.out = 100)
 r <- as.vector(sqrt(outer(x^2, y^2, "+")))

 grid <- expand.grid(x=x, y=y)
 grid$z <- cos(r^2) * exp(-r/(pi^3))
 plot1 <- levelplot(z~x*y, grid, cuts = 50, scales=list(log="e"), xlab="",
           ylab="", main="Weird Function", sub="with log scales",
           colorkey = FALSE, region = TRUE)

 plot2 <- levelplot(z~x*y, grid, cuts = 50, scales=list(log="e"), xlab="",
           ylab="", main="Weird Function", sub="with log scales",
           colorkey = FALSE, region = TRUE)
 grid.arrange(plot1,plot2, ncol=2)

enter image description here [/g0]

64
ответ дан hhh 21 August 2018 в 08:05
поделиться
  • 1
    Это более аккуратно, чем принятый ответ. – qed 26 October 2013 в 14:55
  • 2
    Здесь вы можете найти опрятные примеры. – Masoud 4 April 2017 в 15:06
  • 3
    @Masoud: Эта страница использует только базовую графику. Речь шла о решетчатой ​​графике. – 42- 4 April 2017 в 17:12
  • 4
    @ 42- Извините, я хотел оставить этот комментарий для другого вопроса, пока я читал ваш ответ. Ты прав. – Masoud 4 April 2017 в 17:14

Это просто сделать, когда вы читаете ?print.trellis. Особый интерес представляет параметр split. Это может показаться сложным с первого взгляда, но это довольно просто, как только вы поймете, что это значит. Из документации:

split: вектор из 4 целых чисел, c (x, y, nx, ny), который говорит, чтобы расположить текущий график в позиции x, y в регулярном массиве nx по ny-графикам. (Примечание: это начало в верхнем левом углу)

Вы можете увидеть пару реализаций на example(print.trellis), но вот тот, который я предпочитаю:

library(lattice)

# Data
w <- as.matrix(dist(Loblolly))
x <- as.matrix(dist(HairEyeColor))
y <- as.matrix(dist(rock))
z <- as.matrix(dist(women))

# Plot assignments
pw <- levelplot(w, scales = list(draw = FALSE))  # "scales..." removes axes
px <- levelplot(x, scales = list(draw = FALSE))
py <- levelplot(y, scales = list(draw = FALSE))
pz <- levelplot(z, scales = list(draw = FALSE))

# Plot prints
print(pw, split = c(1, 1, 2, 2), more = TRUE)
print(px, split = c(2, 1, 2, 2), more = TRUE)
print(py, split = c(1, 2, 2, 2), more = TRUE)
print(pz, split = c(2, 2, 2, 2), more = FALSE)  # more = FALSE is redundant

Приведенный выше код дает вам эту цифру:

Как вы можете видеть, split принимает четыре параметра. последние два относятся к размеру вашего кадра (аналогично тому, как это делает mfrow), тогда как первые два параметра позиционируют ваш график в nx на ny.

8
ответ дан Waldir Leoncio 21 August 2018 в 08:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: