объединение двух точечных графиков с разными осями y приводит к перекрытию по оси x - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь объединить 2 точечных графика, используя пакеты lattice и latticeExtra, но обнаруживаю, что группы данных на оси x перекрываются в комбинированном графике.Вот воспроизводимый пример:

Сначала я создаю 2 воспроизводимых набора данных и расплавляю их так, чтобы они были длинными, а не широкими:

require(lattice)

df1 <- data.frame(Treatment = rep(c("B", "C"), each = 6),
                  LocB = sample(1:100, 12), 
                  LocC = sample(1:100, 12))

dftwo <- data.frame(Treatment = rep(c("A"), each = 6),
                    LocA = sample(1:100, 6))

dat.reprod1 <- melt(df1, id.vars = 'Treatment')

dat.reprod2 <- melt(dftwo, id.vars = 'Treatment')

И затем я создаю точечную диаграмму для каждого набора данных:

dotreprod1 <- dotplot(value ~ Treatment, data = dat.reprod1,
                      par.strip.text = list(cex = 3),
                      cex = 2)

enter image description here

dotreprod2 <- dotplot(value ~ Treatment, data = dat.reprod2,
                      par.strip.text = list(cex = 3), col = "orange",
                      cex = 2)

enter image description here

И затем я объединяю их, добавляяновая ось Y для dotreprod2:

require(latticeExtra)
doubleYScale(dotreprod1, dotreprod2, add.ylab2 = TRUE, use.style = F)

enter image description here

К сожалению, на оси x комбинированного графика нет места для "A", поэтомуоранжевые точки перекрываются с синими.Можно ли создать пространство на оси X, чтобы «А», «В» и «С» находились рядом друг с другом, а точки не перекрывались?

1 Ответ

0 голосов
/ 07 октября 2018

На обоих отдельных графиках укажите переменную x как factor с levels объединенных данных и установите drop.unused.levels = FALSE

dotreprod1 <- dotplot(value ~ factor(Treatment, levels = LETTERS[1:3]),
                      data = dat.reprod1,
                      drop.unused.levels = FALSE)

dotreprod2 <- dotplot(value ~ factor(Treatment, levels = LETTERS[1:3]),
                      data = dat.reprod2,
                      col = "orange",
                      drop.unused.levels = FALSE)

doubleYScale(dotreprod1, dotreprod2, add.ylab2 = TRUE, use.style = FALSE)

enter image description here

...