添加自定义颜色渐变作为图例

时间:2018-02-16 22:45:01

标签: r plot layout colors legend

我使用image()函数创建了六个带有R基础图形的热图。它们显示y轴的深度和沿x轴的时间。 z值是温度。此外,您可以看到一些轮廓线,其标签指示温度,单位为°C。 enter image description here 由于每个绘图来自不同的数据框架,温度范围略有不同,我必须确保使用相同的颜色以一致的方式显示温度。因此,我定制了一个色标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)

enter image description here 我使用如下布局矩阵设置上面的六个图:

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)的标题。知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:1)

以下是一段可能有用的代码:

{% extends "dashboard/base.html" %}

{% block title %}{{ resource_id }}{% endblock %}

{% block content %}

<script>
...
// Get the data

data = {{ utilization|safe }};

  // format the data
  data.forEach(function(d) {
      d.d = parseTime(d.d);
      d.p = +d.p;
      d.pe = +d.pe;
      d.ye = +d.ye;
  });
...

</script>
{% endblock %}

您可能需要调整边距!

答案 1 :(得分:0)

好的,在this post的帮助下计算出来,它使用自定义函数来绘制比例。我只需要删除dev.new()调用,以避免在新设备中绘制色标。该功能非常灵活,但您仍需要使用par(mar = c())参数来调整垂直条的宽度和高度。

相关问题