这是从R获得的图片(代码如下)。
我想以 pdf格式导出它。
但是,我想首先删除右侧的图例栏。
据我所知,没有可选参数控制此栏图例。
你会怎么做?
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 :(得分:5)
filled.contour
函数实际上是两个图的组合;一个是填充轮廓,一个是图例。您可以做的是修改原始功能并创建自己的自定义功能。以下是我称为my.filled.contour的修改后的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)
答案 1 :(得分:4)
我会按照joran的建议使用.filled.contour
制作新的情节。
例如:
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)
品牌