1引言
原理很简单,就是绘制一系列连续的矩形,然后填充对应的颜色就好了。
具体代码文末贴出, 感兴趣的同学可以研究一下。
2安装
函数在 jjPlot 里面:
# install.packages("devtools")
devtools::install_github("junjunlab/jjPlot")
3介绍
grid.colorkey 绘制一个连续型颜色条, pos 指定水平还是竖直, ticks.side 指定标签在哪边:
grid.newpage()
pushViewport(viewport(x = 0.5,y = 0.5,
width = 0.25,height = 0.75))
grid.colorkey(x = 0:10,pos = "v",ticks.side = "left")
右边:
grid.newpage()
pushViewport(viewport(x = 0.5,y = 0.5,
width = 0.25,height = 0.75))
grid.colorkey(x = 0:10,pos = "v",ticks.side = "right")
水平:
grid.newpage()
pushViewport(viewport(x = 0.5,y = 0.5,
width = 0.6,height = 0.25))
grid.colorkey(x = 0:10,pos = "h",ticks.side = "top")
底部标签:
grid.newpage()
pushViewport(viewport(x = 0.5,y = 0.5,
width = 0.6,height = 0.25))
grid.colorkey(x = 0:10,pos = "h",ticks.side = "bottom")
修改颜色:
grid.newpage()
pushViewport(viewport(x = 0.5,y = 0.5,
width = 0.6,height = 0.25))
grid.colorkey(x = 0:10,pos = "h",ticks.side = "bottom",
color = c("#F6F1F1","#AFD3E2","#19A7CE","#146C94"))
grid.newpage()
pushViewport(viewport(x = 0.5,y = 0.5,
width = 0.6,height = 0.25))
grid.colorkey(x = 0:10,pos = "h",ticks.side = "bottom",
color = rainbow(10))
具体绘图的话,还得给对应的数据大小分配给对应的颜色,这样才能和图例匹配起来。
4代码
grid.colorkey <- function(x = NULL,
color = NULL,
color.n = 100,
ticks.side = c("left","right","top","bottom"),
pos = c("h","v")){
pos <- match.arg(pos,c("h","v"))
ticks.side <- match.arg(ticks.side,c("left","right","top","bottom"))
# check position
if(pos == "v"){
x_scale <- c(0,1)
y_scale <- range(as.numeric(x))
xpos <- 0.5
ypos <- seq(0,1, length = color.n)
r_width = unit(1, "npc")
r_height = 1/(color.n - 1)
}else{
y_scale <- c(0,1)
x_scale <- range(as.numeric(x))
ypos <- 0.5
xpos <- seq(0,1, length = color.n)
r_width = 1/(color.n - 1)
r_height = unit(1, "npc")
}
# canvas
pushViewport(viewport(angle = 0,
yscale = y_scale,
xscale = x_scale))
# assign colors
if(is.null(color)){
cols <- c("blue","white","red")
}else{
cols <- color
}
col_p <- colorRampPalette(cols)(color.n)
# just
if(pos == "v"){
just <- c("bottom",rep("centre",color.n-2),"top")
# loop to create color
for (i in 1:color.n) {
grid.rect(x = xpos,
y = ypos[i],
height = r_height,
width = r_width,
just = just[i],
gp = gpar(col = col_p[i], fill = col_p[i]))
}
}else{
just <- c("left",rep("centre",color.n-2),"right")
# loop to create color
for (i in 1:color.n) {
grid.rect(x = xpos[i],
y = ypos,
height = r_height,
width = r_width,
just = just[i],
gp = gpar(col = col_p[i], fill = col_p[i]))
}
}
grid.rect(gp = gpar(fill = NA))
# add axis
if(pos == "h"){
jjPlot::grid.xaxis2(side = ticks.side,tick.len = 0.25)
}else{
jjPlot::grid.yaxis2(side = ticks.side,tick.len = 0.25)
}
popViewport()
}
5结尾
路漫漫其修远兮,吾将上下而求索。
欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群 (微信交流群需收取 20 元入群费用,一旦交费,拒不退还!(防止骗子和便于管理)) 。QQ 群可免费加入, 记得进群按格式修改备注哦。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/307831.html