r - ggplot 为每个值获取颜色

标签 r ggplot2 plot spatial

我有一个空间数据集,包含从 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()

enter image description here

另一种方法是使用手动秤,我认为这在这里更有意义。据我了解,您将填充颜色视为离散变量,并且标签应对应于级别,而不是对应于 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()

enter image description here


编辑

要在底部获取图例,请尝试:

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))

enter image description here

关于r - ggplot 为每个值获取颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74069253/

相关文章:

r - 如何创建包含每个组的所有点的箱线图,可以手动分配点的颜色

r - 以定义的方式排列图例中的项目

python - 在 python 上使用 graphviz 时如何设置节点的大小?

删除 R 中 ggplot2 中的单个 x 轴刻度线?

r - 绘制 geom_bar() 时避免 ggplot 对 x 轴进行排序

r - 在 R 中表示哈希表/字典/映射的自然方式

r - 如何在data.table中选择一个值?

r - 如何使用 plot_grid 自定义边距和标签设置?

python - 如何使用 MNE 包滚动浏览 EEG 数据?

r - 抖动点时避免重叠