我有一个空间数据集,包含从 0 到 10 的值。我希望每个数字(11 个数字)都具有渐变的唯一颜色。简单的绘图函数可以解决这个问题(将一种颜色分配给一个值),但我的默认值是 ggplot,我也想在这里使用它。由于某种原因,ggplot 仅使用十种颜色,我不明白为什么。我想我可能只是使用了错误的scale_x_y函数。
可重现的示例:
library(raster)
#Colors
cols <- colorRampPalette(c("yellow", "red", "darkred", "black"))
# Create Raster
r <- raster(ncol=100, nrow=100)
r[] <- sample(0:10, 10000, replace = T)
# Plot simple
plot(r, col=cols(11)) # 11 colors seen here
# Convert to df
r <- as.data.frame(r, xy=T)
# Plot with ggplot
X <- ggplot(data = r) + geom_raster(aes(x = x, y = y, fill = layer), interpolate = F) +
scale_fill_stepsn(colors=cols(11), breaks=seq(0,10,1), show.limits=T)
print(X) # only 10 colors seen here
最佳答案
在scale_fill_stepsn
中,中断位于每个容器的限制处。如果您有 11 个中断序列,那么您只有 10 个垃圾箱(如果您有 11 个栅栏柱,则它们之间只有 10 段栅栏)。您需要在休息序列中添加 1,否则 10 级将被排除:
ggplot(data = r) +
geom_raster(aes(x = x, y = y, fill = layer), interpolate = FALSE) +
scale_fill_stepsn(colors = cols(11), breaks = seq(0, 11, 1),
show.limits = TRUE) +
coord_equal()
另一种方法是使用手动秤,我认为这在这里更有意义。据我了解,您将填充颜色视为离散变量,并且标签应对应于级别,而不是对应于 scale_fill_stepsn
所暗示的标签之间的中断
ggplot(data = r) +
geom_raster(aes(x = x, y = y, fill = factor(layer, 10:0))) +
scale_fill_manual(values = rev(cols(11)), name = 'layer') +
coord_equal()
编辑
要在底部获取图例,请尝试:
ggplot(data = r) +
geom_raster(aes(x = x, y = y, fill = factor(layer, 0:10))) +
scale_fill_manual(values = cols(11), name = 'layer ') +
coord_equal() +
guides(fill = guide_legend(label.position = 'top', nrow = 1)) +
theme(legend.position = 'bottom',
legend.spacing.x = unit(0, 'mm'),
legend.title = element_text(hjust = 3, vjust = 0.25))
关于r - ggplot 为每个值获取颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74069253/