我试图弄清楚如何在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上运行的函数,并获得相同的“每个值的颜色”或“每个值的范围”
谢谢!
答案 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)