我正在尝试为热图创建一个密钥,但据我所知,我不能使用现有工具添加图例,因为我自己生成了颜色(我手动转动)一个缩放变量为短彩虹的rgb值([255,0,0]到[0,0,255])。
基本上,我想要做的就是使用最右边的第10个屏幕来创建一个包含这10种颜色的矩形:"#0000FF","#0072FF",&#34 ;#00E3FF","#00FFAA","#00FF38","#39FF00","#AAFF00",&#34 ;#FFE200","#FF7100","#FF0000"
带有三个数字标签的- 0,max / 2和max
本质上,我想手动生成一个看起来像基本热图颜色键的对象。
据我所知,split.screen只能将屏幕分成两半,这不是我想要的。我想要的图形我已经知道如何生成占据最左边90%的屏幕,我希望这个彩色矩形占据其他10%。
感谢。
编辑:我非常感谢关于最佳方式的建议 - 说,我仍然想知道最初的方法来完成最初的任务 - 手工制作传奇;我已经能够生成我正在寻找的精确热图图形 - 虚假着色并不是我所拥有的ggplot的唯一问题 - 这只是说服我切换的最终因素。我需要一个非ggplot解决方案。编辑#2:这接近我正在寻找的解决方案,除了这最多只能达到10而不是接受最大值作为参数(我将在多个数据集上运行此代码,所有这些都有不同的最大值 - 我希望图例能够反映这一点。此外,如果我更改图表的大小,则键会分离为断开连接的方块。
答案 0 :(得分:0)
查看布局功能(link)。我想你想要这样的东西:
layout(matrix(c(1,2), 1, 2, byrow = TRUE), widths=c(9,1))
## plot heatmap
## plot legend
我还建议使用ggplot2包和geom_tile函数,它将为您处理所有这些。
假设您的数据位于具有x和y坐标以及热图值的数据框中(例如gdat <- data.frame(x_coord=c(1,2,...), y_coord=c(1,1,...), val=c(6,2,...))
)那么您应该能够使用以下ggplot命令生成所需的热图图:
ggplot(gdat) + geom_tile(aes(x=x_coord, y=y_coord, fill=val)) +
scale_fill_gradient(low="#0000FF", high="#FF0000")
要将数据转换为以下格式,您可能需要查看非常有用的reshape2包。
给定一个脚本没有ggplot对这个答案的限制是如何用基础R生成图。
colors <- c("#0000FF", "#0072FF", "#00E3FF", "#00FFAA", "#00FF38",
"#39FF00", "#AAFF00", "#FFE200", "#FF7100", "#FF0000")
layout(matrix(c(1,2), 1, 2, byrow = TRUE), widths=c(9,1))
plot(rnorm(20), rnorm(20), col=sample(colors, 20, replace=TRUE))
par(mar=c(0,0,0,0))
plot(x=rep(1,10), y=1:10, col=colors, pch=15, cex=7.1)
您可能需要调整设备的cex。