4

問題

ヒートマップを試してみると、おそらくイライラするほど明白な答えを持つ循環的な質問があります...

とパッケージを使用して、異なるデータでヒートマップをプロットすることに関する質問に答えました。基本的に、非常に異なるスケールの x 軸と y 軸を、プロットの準備が整ったパッケージで補間できます。fieldsggplot2akima

残念ながら、軸にラベルを付け直して元の値を参照する方法を見つけることができません。breakslabelsパラメータの使用が含まれることはわかっています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

結果

正しくラベル付けされたヒート マップ

まだ解決されていません

問題が 1 つあります。コードを最初に実行すると、ラベルが逆に生成されます。2 回目以降の実行では、ラベルが正しくラベル付けされます。多分別の質問ですか?...

4

1 に答える 1

5

私はこのようなことをしました:

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

適切にラベル付けされた軸を持つヒートマップ

于 2012-06-02T13:11:42.820 に答える