如何制作Y轴不均匀的热图?
问题描述:
当y轴不均匀时,如何制作热图(或者如果它被称为别的东西)?我也愿意插值,但最好没有它。如何制作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")
FULL数据将在此处
答
可以使用geom_rect
代替geom_tile
指定不同的切片高度。从帮助文件:
geom_rect和geom_tile做同样的事情,但参数化 不同:geom_rect采用四角的位置(XMIN, XMAX,y最小和y),而geom_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()
(我列入&改变中点在这个答案更清晰的视觉区别瓷砖黑色轮廓做请随意将其移除以适合您的实际使用情况。)
当您尝试绘制数据时出了什么问题,以及您希望最终情节看起来如何? – Marius
基本上,我得到了水平线和没有块。最后的情节应该像我附加的那个,但基本上,不规则大小的块无处不在... – maximusdooku
因此,瓷砖应该覆盖整个阴谋区域,或掩盖下一个瓷砖的底部?您需要考虑数据中的时间和图层值如何映射到要查看的图块。 – Marius