r - 在ggplot中平滑热图
问题描述
我有一个如下所示的数据框:
X = c(6,6.2,6.4,6.6,6.8,5.6,5.8,6,6.2,6.4,6.6,6.8,7,7.2,7.4,7.6,7.8,8,2.8,3,3.2,3.4,3.6,3.8,4,4.2,4.4,4.6,4.8,5)
Y = c(2.2,2.2,2.2,2.2,2.2,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.6,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8,2.8)
Value = c(0,0.00683254,0,0.007595654,0.015517884,0,0,0,0,0,0,0,0,0,0.005219395,0,0,0,0,0,0,0,0,0,0,0,0.002892342,0,0.002758141,0)
table = data.frame(X, Y, Value)
我根据以下命令在 R 中整理了一个热图:
ggplot(data = table, mapping = aes(x = X, y = Y)) +
geom_tile(aes(fill = Value), colour = 'black') +
theme_void() +
scale_fill_gradient2(low = "white", high = "black") + xlab(label = "X") + ylab(label = "Y")
由于不是每个 X 和 Y 都有一个值,因此会导致如下图所示。
我正在尝试平滑情节并提出以下问题:
由于绘制的值之间存在小的空白,如何将这些空白着色为中值强度?换句话说,在将非零“值”绘制在顶部(叠加)之前,我将如何首先创建一个具有非零中值“值”的初始层?
解决方案
我不确定它是否完全符合您的需要,但据我了解,您有一些缺失值以及 X 和 Y 的组合。
因此,您可以使用complete
函数 fromtidyr
获取 X 和 Y 的所有不同组合(那些没有值的将被填充NA
),然后通过na.value
在函数中使用参数scale_fill_gradient2
,您可以将这些NA
值的值设置为中点值的相同颜色:
library(tidyr)
library(dplyr)
library(ggplot2)
table %>% complete(X,Y) %>%
ggplot(aes(x = X, y = Y))+
geom_raster(aes(fill = Value), interpolate = TRUE)+
scale_fill_gradient2(low = "white", mid = "grey",high = "black",
na.value = "grey")
推荐阅读
- reactjs - React-router-dom + Suspense:gh-pages 部署中的问题
- angular - 在间谍服务中模拟 API 路由(使用 Jasmine)
- jestjs - 停止执行 JSDOM 脚本
- mongodb - Mongodb Mongoose 在运行时更改收集
- react-native - 在反应原生导航中从 Tab 屏幕打开堆栈屏幕
- save - 注销时丢失书签
- c++ - 在 C++ 中的 noexcept 函数中抛出异常的编译器和运行时行为是什么?
- visual-studio-code - 有没有办法在不设置全局变量的情况下通过 vscode 使用 minGW g++ 编译 c++ 源文件?
- geoserver - 恢复地理服务器默认图层
- java - Hibernate NullPOinter / 无法创建到服务器的连接