[

请注意两个图像上色标标签的差异。顶部图像是 R 3.2.5 的输出,相同的代码在 R 2.15.2 中生成底部图像。我想解决顶部图中标签的“移位”以匹配底部的标签。此查询中给出的示例代码用于生成两个图。

我正在尝试使用 image.plot 绘制 map ,但色阶的最小值和最大值并未准确显示在提示处。我在 R 版本 3.2.5 (2016-04-14) 中遇到了这个问题;平台:x86_64-w64-mingw32/x64(64 位)和库包“字段”垃圾邮件版本 1.4-0 (2016-08-29)

相比之下,在 R 版本 2.15.2 (2012-10-26),平台:x86_64-w64-mingw32/x64 (64-bit) 和“字段”包 0.41-0 (2014-02-26)。这是示例代码:

library(fields)
temp <- matrix(data=rexp(200, rate=10), nrow=180, ncol=360)
min(temp)
max(temp)
color_plate <- c("#FF0000", "#FF4D00", "#FF7000", "#FF8A00", "#FFA800", "#FFBF00", "#FFF000", "#FFFF54", "#AAFFFF","#7FFFFF", "#55FFFF", "#2AFFFF", "#00CFFF", "#20BFFF", "#209FFF", "#2060FF")

zlim <- seq(0.08,0.40,by=0.04)
temp[temp<min(zlim)] <- min(zlim)
temp[temp>max(zlim)] <- max(zlim)

image.plot(temp,col=color_plate,
           axis.args=list(cex.axis =1,at=zlim, labels=zlim,mgp=c(1, 0, 0),tck=0.1))

最佳答案

我能回答这个问题的最好办法就是逃脱image.plot()的限制,并将热图重新编码为ggplot2。我编写的代码应将您的刻度线重新定位到适当的位置。请注意,"Var1" 对象 "Var2" 中的 ggplotp 可以根据您希望数据的显示方式进行切换。我使用 melt() 来转换 temp 对象,这意味着原始行/列指定丢失。我不确定在 image.plot() 函数的 x/y 轴上绘制的是哪个,所以如果我选择了错误的,请务必切换 "Var1""Var2"

我希望这有帮助!

library(fields)
library(reshape2)
library(ggplot2)
library(grid)

temp <- matrix(data=rexp(200, rate=10), nrow=180, ncol=360)

color_palette <- c("#FF0000", "#FF4D00", "#FF7000", "#FF8A00",
        "#FFA800", "#FFBF00", "#FFF000", "#FFFF54", "#AAFFFF","#7FFFFF",
        "#55FFFF", "#2AFFFF", "#00CFFF", "#20BFFF", "#209FFF", "#2060FF")

zlim <- seq(0.08,0.40,by=0.04)
zlim2 <- seq(0.08,0.40,by=0.02)

temp[temp<min(zlim)] <- min(zlim)
temp[temp>max(zlim)] <- max(zlim)
rownames(temp) <- seq(0,1,1/(length(temp[,1])-1))
colnames(temp) <- seq(0,1,1/(length(temp[1,])-1))

tdm <- melt(temp)

tdm$val_for_color <- NA
##can change this as long as you end up with 17 classes (labeled 1-17) for color assignment
for(i in 1:(length(zlim2)-1)){
    tdm$val_for_color[which(tdm$value >= zlim2[[i]] & tdm$value <= zlim2[[i+1]] )] <- i
}

p <- ggplot(tdm, aes(x = Var1, y = Var2, fill = val_for_color)) +
        geom_raster() + scale_fill_gradientn(breaks=seq(1,length(zlim),1),colors=color_palette, labels=zlim)+
        scale_x_continuous(expand=c(0,0)) +
        scale_y_continuous(expand=c(0,0)) +
        guides(fill = guide_colorbar(draw.ulim = TRUE,draw.llim = FALSE,
                        barwidth = 0.7, barheight = 10, limits=c(min(zlim),max(zlim)), raster=FALSE,
                        ticks=FALSE,
                        title=NULL))+
        ylab(NULL)+
        xlab(NULL)+
        theme_bw()

g <- ggplotGrob(p)

#this shifts and spreads the labels
d <-g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[1]]
g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[1]] <- g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[1]]-d
for(i in 2:length(g$grobs[[15]][[1]][[1]]$grobs[[3]]$y)){
    g$grobs[[15]][[1]][[1]]$grobs[[3]]$y[[i]] <- d*5*(i-1)
}

grid.draw(g)

关于r - R 中的 image.plot 不显示色标边缘的色标值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42149954/

10-12 18:00