R 标记ggplot2中转换数据上的重缩放值 问题

R 标记ggplot2中转换数据上的重缩放值 问题,r,ggplot2,heatmap,R,Ggplot2,Heatmap,当我用热图做实验时,这里有一个循环问题,可能有一个令人沮丧的显而易见的答案 我回答了一个关于使用字段和ggplot2包的问题。它基本上允许使用akima软件包对不同比例的x轴和y轴进行插值,以便进行绘图 不幸的是,我无法找到一种方法来重新标记轴,以便它们引用原始值。我知道这将涉及在ggplot2中使用中断和标签参数,但我只能产生错误。对于两个绘图包的解决方案,我们将不胜感激 更新了解决方案 为方便起见,以下是我使用ggplot2的代码: library("akima") library("ggp

当我用热图做实验时,这里有一个循环问题,可能有一个令人沮丧的显而易见的答案

我回答了一个关于使用
字段
ggplot2
包的问题。它基本上允许使用
akima
软件包对不同比例的x轴和y轴进行插值,以便进行绘图

不幸的是,我无法找到一种方法来重新标记轴,以便它们引用原始值。我知道这将涉及在
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
library(“akima”)
图书馆(“ggplot2”)

x、 我做了这样的事情:

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
library(“akima”)
图书馆(“ggplot2”)

x、 orig谢谢@x-he,我们似乎快到了。我已更新了问题,以澄清L1-L4标签应参照原始比例。请看一下问题?+1中的更新代码,为我指明了正确的方向。我已完成解决方案并更新了问题。我建议对你的答案进行编辑。如果你接受,那么这就得到一个勾号:)我有一个关于刻度的问题。你说你想让刻度指向原始刻度。但是你更新的问题中的图中的刻度不是指居中后的刻度吗(?)哦,没关系:)我猜我的答案中更新的图具有原始刻度。问题是x.orig和y.orig对于插值来说太不相似了。我想重新缩放它们以进行打印,但随后将标签映射回原始值。这是通过你的break.points想法实现的。再次感谢:)