【发布时间】:2018-07-27 21:38:48
【问题描述】:
我使用image() 函数创建了六个带有 R 基础图形的热图。它们在 y 轴上显示深度,在 x 轴上显示时间。 z 值是温度。此外,您还可以看到一些带有标签的等高线,以°C 为单位指示温度。
由于每个图都来自具有略微不同温度范围的不同数据框,因此我必须确保使用相同的颜色以一致的方式显示温度。因此,我定制了一个色标cols,显示蓝色端的低温和红色端的高温。对于六个数据帧中的每一个,我将它们的最低和最高温度对齐在预定义的最大值和最小值cols。请参阅下面左上角数据帧 RW1-iBA 的代码示例。
# Customise colour scale
RColorBrewer::display.brewer.all()
cols = rev(colorRampPalette(RColorBrewer::brewer.pal(11,"RdYlBu"))(2000))
# Define temperature range for cols
min.cols.temp <- -23
max.cols.temp <- 23
# Define min and max temperatures for RW1-iBA
max_temp <- max(RW1_iBA$temp)
min_temp <- min(RW1_iBA$temp)
# Align RW1-iBA along cols
lowerend.RW1_iBA <- round(min_temp/min.cols.temp*1000)
upperend.RW1_iBA <- round(max_temp/max.cols.temp*1000)
trunc.low.RW1_iBA <- 1000-lowerend.RW1_iBA
trunc.upp.RW1_iBA <- 1001+upperend.RW1_iBA
col.RW1_iBA <- cols[-c(1:trunc.low.RW1_iBA, trunc.upp.RW1_iBA:2000)]
我在这里所做的基本上是将cols 的上限和下限分别设置为 23 和 -23,确保这些值代表所有数据帧的完整温度范围。然后,我将每个数据帧的温度值沿色标分别对齐,方法是分别剪掉超过数据帧最大值和低于其最低温度值的cols 部分。这为我提供了六种不同的色标(上图:col.RW1_iBA),用于分别绘制每个数据帧。
我现在缺少的是 cols 作为图例添加到情节中。秤本身是这样的:
plot(rep(1, 2000), col = cols, pch = 16)
layoutMatrix
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 7
[3,] 3 6 7
点 1 到 6 被您在上面看到的六个地块占据。第 3 列(包含“绘图”7)的边距已经设置得更小,我想在其中垂直添加 cols 作为图例。充其量它具有温度值 20、10、0、-10、-20 的刻度线和标签以及温度 (°C) 之类的标题。知道我该怎么做吗?
【问题讨论】:
标签: r plot layout colors legend