ggplot2 scale fill gradient with discrete cap
我正在寻找价值的热点图。我希望热图从低值(示例代码中为0)的蓝色变为高值(示例代码中为75)的绿色。但是,数据包含的值大于75。我希望任何大于75的值都用红色填充。
因此,总而言之,我希望将填充从0的前75个蓝色缩放为绿色,并将大于75的任何值填充为红色。我现在使用的代码可以做到这一点,但是仍然可以将绿色值从76缩放为红色,而不是将它们全部设置为红色。
我在帖子中使用了Brian Diggs的答案(ggplot2热图,带有用于范围值的颜色),但是该答案并未涵盖如何填充超出梯度上限值的所有值。
帖子(ggplot geom_point()的颜色基于特定的离散值)似乎为geom_point回答了一个非常相似的问题,但是我很难将其调整为geom_tile。
我的示例代码在下面,感谢您的帮助!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #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") |
这是一个部分解决方案,它为图形着色,但使图例不完全正确:
1 2 3 4 5 6 7 8 | 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") |
技巧是将边界值设置为
编辑添加:快速搜索提出了一些解决方案:
在连续图的ggplot图例中添加一个NA值框