0
假设我想绘制以下数据:如何在ggplot的纵坐标中绘制不规则数据的热图?
# First set of X coordinates
x <- seq(0, 10, by = 0.2)
# Angles from 0 to 90 degrees
angles <- seq(0, 90, length.out = 10)
# Convert to radian
angles <- deg2rad(angles)
# Create an empty data frame
my.df <- data.frame()
# For each angle, populate the data frame
for (theta in angles) {
y <- sin(x + theta)
tmp <- data.frame(x = x, y = y, theta = as.factor(theta))
my.df <- rbind(my.df, tmp)
}
x1 <- seq(0, 12, by = 0.3)
y1 <- sin(x1 - 0.5)
tmp <- data.frame(x = x1, y = y1, theta = as.factor(-0.5))
my.df <- rbind(my.df, tmp)
ggplot(my.df, aes(x, y, color = theta)) + geom_line()
这给了我一个很好的情节:
现在我想提请热图出这个数据集。有教程here和there这样做使用geom_tile
来做到这一点。
所以,让我们试试:
# Convert the angle values from factors to numerics
my.df$theta <- as.numeric(levels(my.df$theta))[my.df$theta]
ggplot(my.df, aes(theta, x)) + geom_tile(aes(fill = y)) + scale_fill_gradient(low = "blue", high = "red")
这并不工作,原因是我的X坐标不具有相同的步骤:
x <- seq(0, 10, by = 0.2)
VS x1 <- seq(0, 12, by = 0.3)
但只要我使用相同的步骤x1 <- seq(0, 12, by = 0.2)
,它的工作原理:
我现实生活中,我的数据集不定时间隔(这是实验数据),但我仍然需要将其显示为热图。我能怎么做?
你有没有一起来看看:http://stackoverflow.com/questions/7001710/how-can-i-force-ggplots-geom-tile-to-fill-every-方面? – bVa
geom_tile()使用数据中的最小步骤来确定切片的大小。您示例中的最小步骤很小,以至于瓷砖不再可见。所以你需要创建一个更粗糙的数据集。例如。通过舍入theta和x。或者将y的值插入粗糙网格。 – Thierry
@bVa现在正在看它。我尝试过并且无法使其工作 – Ben