gpt4 book ai didi

带有离散色标的光栅图,用于负值和正值 R

转载 作者:行者123 更新时间:2023-12-01 00:46:51 26 4
gpt4 key购买 nike

我有两个要映射的数据框。 dfs 有相同的 xy 坐标,我需要一个 单色条带有可见的 离散色标对于两个 dfs,就像这里显示的一样。我希望颜色键中的颜色与自定义中断相匹配。非常感谢可以在此示例之外应用的更通用的解决方案

enter image description here

中的 RdYIBu 调色板RcolorBrewer 包是我所追求的。

enter image description here

到目前为止我的代码:

library(rasterVis)
ras1 <- raster(nrow=10,ncol=10)
set.seed(1)
ras1[] <- rchisq(df=10,n=10*10)
ras2=ras1*(-1)/2
s <- stack(ras1,ras2)
Uniques <- cellStats(s,stat=unique)
Uniques.max <- max(Uniques)
Uniques.min <- min(Uniques)
my.at <- round(seq(ceiling(Uniques.max), floor(Uniques.min), length.out= 10),0)
myColorkey <- list(at=my.at, labels=list(at=my.at))
levelplot(s, at=my.at, colorkey=myColorkey,par.settings=RdBuTheme())

如何设置颜色键中的值以匹配 map 上的值,如上面的示例 map 所示?请注意,颜色键中的颜色数量应与 map 上显示的数量相同。

非常感谢您的帮助。您的建议将帮助我开发许多这样的 map 。

谢谢。

最佳答案

以下应该让你继续前进。使用 ggplot2 文档和许多在线示例,您应该能够调整美学以使其看起来完全符合您的要求,而不会遇到任何麻烦。干杯。

#Order breaks from lowest to highest
my_at <- sort(my_at)

#Get desired core colours from brewer
cols0 <- brewer.pal(n=length(my_at), name="RdYlBu")

#Derive desired break/legend colours from gradient of selected brewer palette
cols1 <- colorRampPalette(cols0, space="rgb")(length(my_at))

#Convert raster to dataframe
df <- as.data.frame(s, xy=T)
names(df) <- c("x", "y", "Epoch1", "Epoch2")

#Melt n-band raster to long format
dfm <- melt(df, id.vars=c("x", "y"), variable.name="epoch", value.name="value")

#Construct continuous raster plot without legend
#Note usage of argument `values` in `scale_fill_gradientn` -
#-since your legend breaks are not equi-spaced!!!
#Also note usage of coord_equal()
a <- ggplot(data=dfm, aes(x=x, y=y)) + geom_raster(aes(fill=value)) + coord_equal()+
facet_wrap(facets=~epoch, ncol=1) + theme_bw() +

scale_x_continuous(expand=c(0,0))+
scale_y_continuous(expand=c(0,0))+
scale_fill_gradientn(colours=cols1,
values=rescale(my_at),
limits=range(dfm$value),
breaks=my_at) +
theme(legend.position="none", panel.grid=element_blank())

#Make dummy plot discrete legend whose colour breaks go along `cols1`
df_leg <- data.frame(x=1:length(my_at), y=length(my_at):1, value=my_at)
gg_leg <- ggplot(data=df_leg, aes(x=x, y=y)) + geom_raster(aes(fill=factor(value))) +
scale_fill_manual(breaks=my_at, values=cols1,
guide=guide_legend(title="",
label.position="bottom")) +
theme(legend.position="bottom")

#Extract discrete legend from dummy plot
tmp <- ggplot_gtable(ggplot_build(gg_leg))
leg <- which(sapply(tmp$grobs, function(x) x$name)=="guide-box")
legend <- tmp$grobs[[leg]]

#Combine continuous plot of your rasters with the discrete legend
grid.arrange(a, legend, ncol=1, heights=c(4, 0.8))

Plot result

关于带有离散色标的光栅图,用于负值和正值 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748871/

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