两个不同的热图,ggplot2,Rstudio 具有相同的热图例

Have same heat legend for two different heatmap plots, ggplot2, Rstudio

问题摘要和信息

我有两个大数据集(如 matrix-layout,但保持 df-s),有 100 列和 11640 行。每行代表每小时的时间,每列代表特定的深度。对于两个数据集(名为 UCCO2 和 RCCO2),时间相同但深度不同(即不同的特定深度)。 UCCO2 的范围是 0 到 12,对于 RCCO2,它是 0 到 ~30 请帮我为他们俩创造一个传奇。我只设法创建具有不同图例的图(注意:我将它们分开 windows)

呈现数据集

以下是 melt() 命令后的数据摘要。我在 commad melt() 之后再次添加了日期 (date_dates),并且是此处看到的最后一列。

后面的剧情中: x-axis为:"date_dates" -->每小时测量时间

y-axis是:"variable"-->这是深度 从下面的代码中可以看出,Fill 是值列。

数据集名称:UCCO2_m & RCCO2_m

summary(UCCO2_m)         

         DATE            variable           value       
     2014-10-26 02:00:00:    200   124    :  11640   Min.   : 1.2    
     2014-06-14 00:00:00:    100   123    :  11640   1st Qu.: 6.8    
     2014-06-14 01:00:00:    100   121    :  11640   Median : 8.4    
     2014-06-14 02:00:00:    100   120    :  11640   Mean   : 8.1    
     2014-06-14 03:00:00:    100   119    :  11640   3rd Qu.: 9.6    
     2014-06-14 04:00:00:    100   118    :  11640   Max.   :12.1    
     (Other)            :1163300   (Other):1094160   NA's   :657399  
       date_dates                 
     Min.   :2014-06-14 00:00:00  
     1st Qu.:2014-10-13 05:45:00  
     Median :2015-02-11 10:30:00  
     Mean   :2015-02-11 10:29:59  
     3rd Qu.:2015-06-12 17:15:00  
     Max.   :2015-10-11 23:00:00 


> summary(RCCO2_m)
                  DATE            variable           value       
 2014-10-26 02:00:00:    200   60     :  11640   Min.   : 1.14   
 2014-06-14 00:00:00:    100   59     :  11640   1st Qu.:10.82   
 2014-06-14 01:00:00:    100   59.1   :  11640   Median :14.51   
 2014-06-14 02:00:00:    100   58     :  11640   Mean   :13.98   
 2014-06-14 03:00:00:    100   58.1   :  11640   3rd Qu.:17.37   
 2014-06-14 04:00:00:    100   57     :  11640   Max.   :27.64   
 (Other)            :1163300   (Other):1094160   NA's   :221208  
   date_dates                 
 Min.   :2014-06-14 00:00:00  
 1st Qu.:2014-10-13 05:45:00  
 Median :2015-02-11 10:30:00  
 Mean   :2015-02-11 10:29:59  
 3rd Qu.:2015-06-12 17:15:00  
 Max.   :2015-10-11 23:00:00  

df-s 的样子

命令前矩阵的示例 "melt()"

df 融化前,行:11640,列:100 如果不包括日期列(请注意,在 R 中日期只有一列

df 的一个例子 AFTER melt()

df之后,其中DATE作为熔化的因子,variable是深度(列名),value是当时的值和深度, date_dates 是我在后面添加的列,用作 x-axis

方法 - Rcode

代码说明: 我正在使用 ggplot2 创建热图。在 melt 和我添加另一个日期列的步骤之后(用于 x-axis 值(不知道这是否有必要,否则 x-axis 值看起来很奇怪))。然后我应用 ggplot 和几个额外的命令来让它更整洁:

colours=rev(c("black","red","yellow","green","blue", "blue2"))    #       Colour scheme for plot

p <- ggplot(UCCO2_m, aes(date_dates, variable)) +
  geom_tile(aes(fill = UCCO2_m$value)) +
  scale_fill_gradientn(guide = "colourbar",
                       colours = colours,
                       na.value = "white",
                       expression(Carbon-Concentration[mg/l]))
#    Add some titles and stuff
p <- p + labs(title = "Carbon Concentration below Watertable at the Upslope Station", x = "Month - Year", y = "Depth (cm)")
    #axis.text.x for x axis only
p<-p + theme(axis.line=element_blank(),
             axis.text.x= element_text(angle=45, vjust=0.5),
             panel.grid.major=element_blank(),
             panel.grid.minor=element_blank(),
             panel.border=element_blank(),
             plot.background=element_blank())
#Fix axis
p <- p + scale_x_datetime(breaks = date_breaks("months"), labels = date_format("%b"))
windows()  
plot(p)`

我的成绩

这就是我的绘图的外观,正如任何人所见,配色方案代表两个绘图中的不同值:


第二个问题只是一个 "bracket" 问题,如果有人知道一个快速的答案

(另请注意,我的 y-axis 非常丑陋!如果有人知道一种简单的方法来显示每秒的值,我也将非常感激,但我知道这可能是另一个问题。现在使用的 y-axis 值是因子,我试图将它们更改为 integer/values 但是在图中到处都出现奇怪的水平灰色条)


您可以明确设置比例尺的数据范围,例如:

... + scale_fill_gradientn(...,limits=range(UCCO2_m$value,RCCO2_m$value)) + ...