用于为栅格指定颜色的功能

时间:2015-08-23 20:35:40

标签: r plot colors

我试图弄清楚如何在R中创建一个函数,我可以用它来设置绘制时栅格中单元格的颜色。最终我将使用绘制的栅格创建这些图的.gif(我已经找到了那部分),但颜色需要保持一致的绘图。即,在一个图中分配给值1的颜色需要与在下一个图中分配给值1的颜色相同。

栅格是(至少现在)以数据框的形式。例如(我只是为了示例而使用随机数,但这就是我的实际数据格式化方式)

A<-data.frame(x=1:100,y=1:100,value=runif(100, 0, 10000))

B<-data.frame(x=1:100,y=1:100,value=runif(100, 5, 5300))

C<-data.frame(x=1:100,y=1:100,value=runif(100, 8500, 12000))

现在我想为某些范围分配颜色,如1-100,101-200等,这样1-100将被绘制为白色,然后101-200将被绘制为蓝色等。理想情况下,某些颜色会从冷到热的颜色。请注意,A,B和C中的值范围都不同。多数民众赞成我需要一个单一的功能,我可以运行每个数据帧,为相同的值范围产生相同的颜色。

现在,如果我绘制这三个数据框

library(ggplot2)

ggplot() + geom_tile(data=A, aes(x=x, y=y, fill=value)) + scale_fill_gradient(low="blue", high="red")

ggplot() + geom_tile(data=B, aes(x=x, y=y, fill=value)) + scale_fill_gradient(low="blue", high="red")

ggplot() + geom_tile(data=C, aes(x=x, y=y, fill=value)) + scale_fill_gradient(low="blue", high="red")

颜色范围保持不变,但值的范围不相同。我需要一个可以在A,B和C上运行的函数,并获得相同的“每个值的颜色”或“每个值的范围”

谢谢!

1 个答案:

答案 0 :(得分:1)

我的诀窍是合并您的数据集并创建一个包含数据集名称的新列。然后,您可以基于这些组(常见图例)创建图例,但为每个数据集创建一个图。

library(ggplot2)
library(dplyr)

A<-data.frame(x=1:100,y=1:100,value=runif(100, 0, 10000), name="A")

B<-data.frame(x=1:100,y=1:100,value=runif(100, 5, 5300), name="B")

C<-data.frame(x=1:100,y=1:100,value=runif(100, 8500, 12000), name="C")

dt = rbind(A,B,C)

# create 10 groups based on value column (based on general quantiles)
dt = dt %>% mutate(group = ntile(value,10))

# see min and max for each group
dt %>% group_by(group) %>% summarise(min= min(value),
                                     max= max(value),
                                     N= n())

# common legend and one plot for each dataset (name)
ggplot() +
  geom_tile(data=dt, aes(x=x,y=y,fill=group)) +
  scale_fill_gradient(low="blue", high="red") +
  facet_grid(~name)