当y轴不均匀时,如何制作热图(或者如果它被称为其他东西)?我也乐于插值,但最好没有它。
当我以偶数间隔绘制图层时,我可以使用此图来获得下图
ggplot(a, aes(x=time, y=Layer, fill = Value))+
geom_tile()+
scale_fill_gradient2(low="blue",mid="yellow",high="red", midpoint=0.5)+
theme_bw()
但是当图层不是1-10个自然数时,我无法继续。
dput(droplevels(head(smx,10)))
structure(list(value = c(5.4023420028113e-07, 5.4023420028113e-07,
5.4023420028113e-07, 5.4023420028113e-07, 5.4023420028113e-07,
5.4023420028113e-07, 5.4023420028113e-07, 6.74006442227979e-08,
6.74006442227979e-08, 6.74006442227979e-08),
time = structure(c(17156, 17156, 17156, 17156, 17156, 17156, 17156, 17162,
17162, 17162),
class = "Date"),
layer = c(0.0120349472577243, 0.0177233992991887, 0.00844582491793334,
0.00756873916071316, 0.0437965816456147, 0.0168056962032031,
0.0181395468747096, 0.0120349472577243, 0.0177233992991887,
0.00844582491793334)),
.Names = c("value", "time", "layer"),
row.names = c(NA, 10L),
class = "data.frame")
完整数据在这里
答案 0 :(得分:1)
您可以使用geom_rect
代替geom_tile
来指定不同的图块高度。从帮助文件:
geom_rect和geom_tile做同样的事情,但是参数化了 不同:geom_rect使用四个角的位置( xmin, xmax,ymin和ymax ),而geom_tile使用tile的中心和 它的大小(x,y,宽度,高度)。
假设数据框中的图层变量引用每个图块的顶部(即ymax),您可以为每个日期创建一个滞后图层变量,以便在数据框的同一行中获取ymin。根据您的数据集,我还假设最低的图块从ymin = 0开始:
library(dplyr)
ggplot(smx %>%
group_by(time) %>%
arrange(layer) %>%
mutate(layer.min = layer - diff(c(0, layer))) %>% #assuming y axis starts from 0
ungroup(), aes(fill = value))+
geom_rect(aes(xmin = time - 0.5, xmax = time + 0.5,
ymin = layer.min, ymax = layer),
colour = "black") +
scale_fill_gradient2(low="blue",mid="yellow",high="red", midpoint = 0.2) +
scale_x_date(date_breaks = "1 day", date_labels = "%b %d") +
theme_bw()
(我将瓷砖包含在黑色轮廓中,并在此答案中更改了中点以获得更清晰的视觉区别。请根据实际使用情况随意删除它们。)