Скрыть верхнюю ось X на графике doubleYScale в R - PullRequest
0 голосов
/ 23 октября 2018

Я строю два xyplots с графиком doubleYScale.Я хотел бы скрыть верхнюю ось X, но все, что я до сих пор пробовал, либо ничего не делает, либо скрывает все оси.Это вообще возможно?

library(lattice)
library(latticeExtra)
x<-seq(1:10)
y<-x^2
y2<-x*2

plot1<-xyplot(y~x, col="black", type="l", ylab="Label1", xlab="") 

plot2<-xyplot(y2~x, col="red", type="l", ylab="Label2", xlab="", scales=list(y=list(col="red")))

doubleYScale(plot1, plot2, add.axis=TRUE, add.ylab2 = TRUE, scales=list(x=list(draw=FALSE)))  

update(trellis.last.object(),
par.settings = simpleTheme(col = c("black", "red"), lty=c(1,1)), horizontal=F, scales=list(x=list(draw=T)))

doubleYScale plot

1 Ответ

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

Как вы можете видеть из предложенного ниже решения, решетка на самом деле не настроена так, чтобы легко делать эту конкретную вещь.Тем не менее, это довольно полностью настраиваемый, и с некоторой работой вы можете получить то, что вы ищете.Вот лишь несколько встроенных комментариев, код, который полностью подавит эту верхнюю ось:

library(lattice)
library(latticeExtra)
library(grid)

## Sample data
x <- seq(1:10)
y <- x^2
y2 <- x*2

## Prepare list of scales setting that suppresses ticks on top axis
myScales <- list(x = list(tck = c(1,0)))

## Prepare parameter settings, including setting the color used in
## plotting axis line to "transparent"
myTheme <- simpleTheme(col = c("black", "red"),
                       lty = c(1,1))
myTheme <- c(myTheme, list(axis.line = list(col = "transparent")))

## Write a custom axis function that only plots axis lines on the
## left, right, and bottom sides
myAxisFun <- function(side, line.col, ...) {
    if (side == "left") {
        grid.lines(x = c(0, 0), y = c(0, 1),
                   default.units = "npc")
    } else if (side == "right") {
        grid.lines(x = c(1, 1), y = c(0, 1),
                   default.units = "npc")
    } else if (side == "bottom") {
        grid.lines(x = c(0, 1), y = c(0, 0),
                   default.units = "npc")
    }
    axis.default(side = side, line.col = "black", ...)
}


## Construct two component plots
plot1 <- xyplot(y ~ x, col="black", type = "l",
                ylab = "Label1", xlab = "",
                par.settings = myTheme,
                scales = myScales,
                axis = myAxisFun) 
plot2 <- xyplot(y2 ~ x, col="red", type = "l",
                ylab = "Label2", xlab = "",
                par.settings = myTheme,
                scales = myScales,
                axis = myAxisFun)

## Meld the two plots 
doubleYScale(plot1, plot2, add.ylab2 = TRUE)

enter image description here

...