Rのggplotでヒートマップ作成時にログスケールとlimitsかけてエラー
例えば、以下のようにヒートマップを作成してエラーになったとする。
library(ggplot2) library(reshape2) library(ggthemes) # data.csv には val1, val2, valueというカラムがある data<-read.table("data.csv", header=T, sep=",") # ヒートマップ作成 p <- ggplot(data,aes(as.factor(val1),as.factor(val2))) # 頻度を対数変換して、limitsも指定 p + geom_tile(aes(fill=value)) + scale_fill_gradientn(colours=rainbow(7), trans = 'log', limits=c(0,10)) 以下にエラー seq.default(min, max, by = by) : 'from' cannot be NA, NaN or infinite
対策1:事前に対数変換
limitsの指定で足切りになったデータがNAになったことが原因なので、 以下のように事前に対数変換しておけば、エラーにならない。
data2<-transform(data, log_value=log(data$value)) p<-ggplot(data2,aes(as.factor(val1),as.factor(val2))) p+geom_tile(aes(fill=log_value))+scale_fill_gradientn(colours=rainbow(7), limits=c(NA,10))
対策2:limitsの最小値にNAを指定
p <- ggplot(data,aes(as.factor(val1),as.factor(val2))) p + geom_tile(aes(fill=value)) + scale_fill_gradientn(colours=rainbow(7), trans = 'log', limits=c(NA,10))
参考
これとは別の話で、横軸を対数軸にする話は以下。