gpt4 book ai didi

r - 在 ggplot2 中对转换后的数据标记重新缩放的值

转载 作者:行者123 更新时间:2023-12-05 01:27:24 24 4
gpt4 key购买 nike

问题

当我尝试热图时,这是一个循环问题,答案可能令人沮丧……

我在 plotting a heatmap with dissimilar data 上回答了一个问题使用 fieldsggplot2包。它基本上允许使用 akima 插值非常不同的 x 轴和 y 轴。准备绘图的包。

不幸的是,我无法找到一种重新标记轴的方法,以便它们引用原始值。我知道这会涉及到 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

结果

Correctly labeled heat map

仍有待解决

仍然存在一个问题:当代码第一次运行时,它会反向生成标签,在第二次和后续运行中,标签被正确标记。也许另一个问题?...

最佳答案

我做了这样的事情:

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

Heat map with properly labeled axes

关于r - 在 ggplot2 中对转换后的数据标记重新缩放的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10861278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com