我希望有一个价值热图。我希望热图从蓝色变为低值(在我的示例代码中为0)到绿色表示高值(在我的示例代码中为75)。但是,数据包含大于75的值。我希望任何大于75的值都用红色填充。
总而言之,我希望填充从0到75的蓝色变为绿色,任何大于75的值都用红色填充。我现在的代码就是这样做了,但仍然从76到100的值从绿色到红色,而不是全部都是红色。
我在帖子中使用了Brian Diggs的答案(ggplot2 heatmap with colors for ranged values),但该答案并不包括如何处理填充梯度刻度的上限值以外的所有值。
帖子(ggplot geom_point() with colors based on specific, discrete values)似乎回答了一个非常类似的geom_point问题,但我无法将其改编为geom_tile。
我的示例代码如下,任何帮助表示赞赏!
#Check packages to use in library
{
library('ggplot2')
library('scales')
}
#Data
horizontal_position <- c(-2, -1, 0, 1, 2)
vertical_position <- c(-2, -2, -2, -2, -2, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2)
data_val <- sample(0:100, 25)
all_data <-data.frame(horizontal_position, vertical_position, data_val)
all_data %>%
ggplot(aes(horizontal_position, vertical_position)) +
geom_tile(aes(fill = data_val), colour = "transparent") +
geom_text(aes(label = data_val),colour="white")+
scale_fill_gradientn(colours = c("blue", "lightblue", "lightgreen", "green", "red"),
breaks=c(0,25,50,75,Inf),
guide = "colorbar")
答案 0 :(得分:2)
这是一个部分解决方案,它会使图形着色,但使图例不完全正确:
all_data %>%
mutate(val2 = replace(data_val, data_val > 75, NA)) %>%
ggplot(aes(horizontal_position, vertical_position)) +
geom_tile(aes(fill = val2), colour = "transparent") +
geom_text(aes(label = data_val),colour="white")+
scale_fill_gradientn(colours = c("blue", "lightblue", "lightgreen", "green"),
breaks=c(0,25,50,75,Inf),
na.value = "red")
诀窍是将您的越界值设置为NA
,其在大多数美学尺度中具有特殊的可选值。当然,如果您的实际数据具有真正的NA,则会发生故障,正如我所提到的,将其显示在颜色栏中是另一个困境。
编辑补充:快速搜索提出了一些解决方案: Add a box for the NA values to the ggplot legend for a continous map