每行的调色板从低到高

时间:2018-05-27 07:30:56

标签: r ggplot2

我试图为数据集绘制geom_tile图,我需要在每行中突出显示最大值和最小值(调色板从绿色变为红色)

Dataset:
    draft_mean trim rf_pwr
 1        12.0  1.0  12253
 2        12.0  0.8  12052
 3        12.0  0.6  12132
 4        12.0  0.4  12280
 5        12.0  0.2  11731
 6        12.0  0.0  11317
 7        12.0 -0.2  12126
 8        12.0 -0.4  12288
 9        12.0 -0.6  12461
 10       12.0 -0.8  12791
 11       12.0 -1.0  12808
 12       12.2  1.0  12346
 13       12.2  0.8  12041
 14       12.2  0.6  12345
 15       12.2  0.4  12411
 16       12.2  0.2  12810
 17       12.2  0.0  12993
 18       12.2 -0.2  12796
 19       12.2 -0.4  12411
 20       12.2 -0.6  12342
 21       12.2 -0.8  12671
 22       12.2 -1.0  13161


ggplot(dataset, aes(trim, draft_mean)) +
 geom_tile(aes(fill=rf_pwr), color="black") +
 scale_fill_gradient(low= "green", high= "red") +
 scale_x_reverse() +
 scale_y_reverse()

Image

此图(图像)采用最小值并将其绘制为绿色,最大值绘制为红色。我需要帮助的是,我需要调色板从绿色到红色(最小到最大)的每一行(图中的2行)而不是整个图。 对于draft_mean = 12.2,rf_pwr应该从修剪值的最小值到最大值进行颜色格式化。 对于draft_mean的每个值,我应该能够使用最低和最高rf_pwr来判断trim值。 我可以绘制各个draft_mean值来绘制,但是所有draft_mean值都需要一起显示。

1 个答案:

答案 0 :(得分:1)

你可以创建一个缩放变量,其中min = 0和max = 1每组如下:

require(tidyverse)

# create toy data 
set.seed(1)
df <- data.frame(
   draft_mean =sort(rep(c(12,12.2),11 )), 
   trim=rep(sample(seq(-1,1,length.out = 11), replace = F),2), 
   rf_pwr = sample(11000:13000,22)
)

# create a scaled variable per unique draft_mean (min = 0 and max = 1)
df <- df %>% group_by(draft_mean) %>% mutate(rf_scl = (rf_pwr- 
min(rf_pwr))/(max(rf_pwr)-min(rf_pwr)))

ggplot(df, aes(trim, draft_mean)) +
   geom_tile(aes(fill=rf_scl), color="black") +
   scale_fill_gradient(low= "green", high= "red") +
   scale_x_reverse() +
   scale_y_reverse()