2013-05-27 4 views
3

Вот изображение, полученное из R (код приведен ниже).удаление части изображения в R

Я бы хотел его экспортировать в формат pdf.

Однако, я бы хотел сначала удалить панель легенды справа.

Насколько я знаю, нет опционального аргумента, который управляет этой легендой.

Как вы поживаете?

enter image description here


library(gplots) 

f <- function(x, y, theta) 
{ 
    num <- (x^(-theta) + y^(-theta) - 1)^(-1/theta) 
    denom <- x * y 
    return(num/denom) 
} 

x <- y <- seq(0.01, 0.18, 0.01) 
z <- outer(x, y, FUN=f, theta=2/3) 

levels=seq(0, 36, 3) 
draw.contour <- function() 
{ 
    contour(x=x, y=y, z=z, add=TRUE, 
      levels=levels, 
      drawlabels=TRUE, 
      labcex=0, 
      xlim=rev(range(x)), 
      ylim=rev(range(y))) 
} 

par(mgp=c(2, 0.5, 0)) 
filled.contour(x=x, y=y, z=z, 
       levels=levels, 
       col=colorpanel(length(levels) + 1, "white", "grey10"), 
       xlim=rev(range(x)), 
       ylim=rev(range(y)), 
       plot.axes={axis(1, c(0.18, 0.01), label=TRUE, tcl=-0.5) 
          axis(2, c(0.18, 0.01), label=TRUE, tcl=-0.5) 
          draw.contour()}, 
       xlab="x", 
       frame=FALSE) 
mtext(text="y", side=2, line=1.8, las=1) 
par(mgp=c(3, 1, 0)) 
+0

Вы можете попробовать '.filled.contour' возможно? – joran

+0

@joran: Что ты имеешь в виду? – Marco

+0

Из документации: «.filled.contour - это интерфейс« голые кости », который добавляет только контурный график к уже настроенной области сюжета. Он предназначен для программного использования, и программист отвечает за проверку условий по аргументам ". Я не пробовал, но похоже, что он добавляет контурный сюжет, но без легенды, к уже настроенной области построения графика. – joran

ответ

3

Я хотел бы сделать новый сюжет, используя .filled.contour в соответствии с рекомендациями Joran.

Например:

plot(NA,xlim=rev(range(x)), 
       ylim=rev(range(y)),xlab="x",ylab="y", 
       frame=FALSE,axes=F,xaxs="i",yaxs="i") 

.filled.contour(x=x, y=y, z=z, 
       levels=levels, 
       col=colorpanel(length(levels) + 1, "white", "grey10")) 
draw.contour() 
axis(1, c(0.18, 0.01), label=TRUE, tcl=-0.5) 
axis(2, c(0.18, 0.01), label=TRUE, tcl=-0.5, las=1) 

делает

enter image description here

+0

Замечательно! Благодаря! – Marco

5

filled.contour функция фактически является комбинацией из двух участков; один - заполненный контур, а один - легенда. Что вы можете сделать, это изменить исходную функцию и создать свою собственную функцию. Ниже приведено изменение filled.contour, которое я назвал my.filled.contour. Все, что я сделал, это комментировать детали легенды. Я не изменил поля, но вы могли бы сделать это, если бы захотели.

my.filled.contour <- 
function (x = seq(0, 1, length.out = nrow(z)), y = seq(0, 1, 
    length.out = ncol(z)), z, xlim = range(x, finite = TRUE), 
    ylim = range(y, finite = TRUE), zlim = range(z, finite = TRUE), 
    levels = pretty(zlim, nlevels), nlevels = 20, color.palette = cm.colors, 
    col = color.palette(length(levels) - 1), plot.title, plot.axes, 
    key.title, key.axes, asp = NA, xaxs = "i", yaxs = "i", las = 1, 
    axes = TRUE, frame.plot = axes, ...) 
{ 
    if (missing(z)) { 
     if (!missing(x)) { 
      if (is.list(x)) { 
       z <- x$z 
       y <- x$y 
       x <- x$x 
      } 
      else { 
       z <- x 
       x <- seq.int(0, 1, length.out = nrow(z)) 
      } 
     } 
     else stop("no 'z' matrix specified") 
    } 
    else if (is.list(x)) { 
     y <- x$y 
     x <- x$x 
    } 
    if (any(diff(x) <= 0) || any(diff(y) <= 0)) 
     stop("increasing 'x' and 'y' values expected") 
    mar.orig <- (par.orig <- par(c("mar", "las", "mfrow")))$mar 
    on.exit(par(par.orig)) 
    w <- (3 + mar.orig[2L]) * par("csi") * 2.54 
    layout(matrix(c(2, 1), ncol = 2L), widths = c(1, lcm(w))) 
    par(las = las) 
    mar <- mar.orig 
    mar[4L] <- mar[2L] 
    mar[2L] <- 1 
    par(mar = mar) 
    plot.new() 
    plot.window(xlim = c(0, 1), ylim = range(levels), xaxs = "i", 
     yaxs = "i") 
# rect(0, levels[-length(levels)], 1, levels[-1L], col = col) 
# if (missing(key.axes)) { 
#  if (axes) 
#   axis(4) 
# } 
# else key.axes 
# box() 
    if (!missing(key.title)) 
     key.title 
    mar <- mar.orig 
    mar[4L] <- 1 
    par(mar = mar) 
    plot.new() 
    plot.window(xlim, ylim, "", xaxs = xaxs, yaxs = yaxs, asp = asp) 
    if (!is.matrix(z) || nrow(z) <= 1L || ncol(z) <= 1L) 
     stop("no proper 'z' matrix specified") 
    if (!is.double(z)) 
     storage.mode(z) <- "double" 
    .Internal(filledcontour(as.double(x), as.double(y), z, as.double(levels), 
     col = col)) 
    if (missing(plot.axes)) { 
     if (axes) { 
      title(main = "", xlab = "", ylab = "") 
      Axis(x, side = 1) 
      Axis(y, side = 2) 
     } 
    } 
    else plot.axes 
    if (frame.plot) 
     box() 
    if (missing(plot.title)) 
     title(...) 
    else plot.title 
    invisible() 
} 

Это результат:

my.filled.contour(x=x, y=y, z=z, 
       levels=levels, 
       col=colorpanel(length(levels) + 1, "white", "grey10"), 
       xlim=rev(range(x)), 
       ylim=rev(range(y)), 
       plot.axes={axis(1, c(0.18, 0.01), label=TRUE, tcl=-0.5) 
          axis(2, c(0.18, 0.01), label=TRUE, tcl=-0.5) 
          draw.contour()}, 
       xlab="x", 
       frame=FALSE) 

enter image description here

+0

@P Lapointe: Спасибо! Дайте мне время, чтобы пройти через него, и я, вероятно, буду принимать его позже. – Marco

+0

@P Lapointe: +1, большое спасибо! – Marco

Смежные вопросы