当我试验热图时,这是一个循环问题,可能有一个令人沮丧的明显答案......
我回答了一个关于使用和包绘制具有不同数据的热图的问题.它基本上允许非常不同的缩放x和y轴插入,并准备好用于绘图.fieldsggplot2akima
不幸的是,我无法找到一种方法来重新标记轴,以便它们返回原始值.我知道它将涉及使用breaks和labels参数,ggplot2但我一直无法产生任何错误.我们非常感谢两种绘图方案的解决方案......
为方便起见,这是我的代码使用ggplot2:
library("akima")
library("ggplot2")
x.orig <- rnorm(20, 4, 3)
y.orig <- rnorm(20, 5e-5, 1e-5)
x <- scale(x.orig)
y <- scale(y.orig)
z <- rnorm(20)
t. <- interp(x,y,z)
t.df <- data.frame(t.)
gt <- data.frame( expand.grid(x=t.$x,
y=t.$y),
z=c(t.$z),
value=cut(c(t.$z),
breaks=seq(min(z),max(z),0.25)))
p <- ggplot(gt) + geom_tile(aes(x,y,fill=value)) +
geom_contour(aes(x=x,y=y,z=z), colour="black")
# --------------------------------------------------------------
# Solution below prompted by X. He's answer:
get.labels <- function(break.points, orig.data, scaled.data, digits) {
labels <- as.character(lapply(break.points,
function(i) round(i * min(orig.data)
/ min(scaled.data),
digits)
)
)
labels
}
x.break.points <- seq(min(x), max(x), 0.5)
x.labels <- get.labels(x.break.points, x.orig, x, digits=2)
p <- p + scale_x_continuous(breaks=x.break.points,
labels=x.labels)
y.break.points <- seq(min(y), max(y), 0.5)
y.labels <- get.labels(y.break.points, y.orig, y, digits=8)
p <- p + scale_y_continuous(breaks=y.break.points,
labels=y.labels)
p
Run Code Online (Sandbox Code Playgroud)

还有一个问题:首次运行代码时,它会反向生成标签,在第二次和后续运行时,标签都会正确标记.也许是另一个问题?......
我做了这样的事情:
library("akima")
library("ggplot2")
x.orig <- rnorm(20, 4, 3)
y.orig <- rnorm(20, 5e-5, 1e-5)
x <- scale(x.orig)
y <- scale(y.orig)
z <- rnorm(20)
t. <- interp(x,y,z)
t.df <- data.frame(t.)
gt <- data.frame( expand.grid(x=t.$x,
y=t.$y),
z=c(t.$z),
value=cut(c(t.$z),
breaks=seq(min(z),max(z),0.25)))
p <- ggplot(gt) + geom_tile(aes(x,y,fill=value)) +
geom_contour(aes(x=x,y=y,z=z), colour="black")
get.labels <- function(break.points, orig.data, scaled.data, digits) {
labels <- as.character(lapply(break.points,
function(i) round(i * min(orig.data)
/ min(scaled.data),
digits)
)
)
labels
}
x.break.points <- seq(min(x), max(x), 0.5)
x.labels <- get.labels(x.break.points, x.orig, x, digits=2)
p <- p + scale_x_continuous(breaks=x.break.points,
labels=x.labels)
y.break.points <- seq(min(y), max(y), 0.5)
y.labels <- get.labels(y.break.points, y.orig, y, digits=8)
p <- p + scale_y_continuous(breaks=y.break.points,
labels=y.labels)
p
Run Code Online (Sandbox Code Playgroud)
