首页 理论教育 ggplot可视化矩形渐变

ggplot可视化矩形渐变

时间:2023-11-19 理论教育 版权反馈
【摘要】:annotation_raster函数用于添加单个带有颜色渐变效果的矩形。

ggplot可视化矩形渐变

annotation_raster函数用于添加单个带有颜色渐变效果的矩形。

library(magick) # 使用image_read

library(plothelper) # 使用enlarge_rastershading_rastergeom_multi_raster

m1=color Ramp Palette(c("darkorange", "#EC4339", "#BE3F76"))(20)

m1=matrix(m1, nrow=1)

## raster参数应指向一个类型为"raster"或"matrix"的对象xminxmaxyminymax用来指定矩形的边界图6-1-1a

p=ggplot()+theme(axis.title=element_blank(), axis.text=element_

blank(), axis.ticks=element_blank())+xlim(0, 10)+ylim(0, 8) # 注意:若不用xlim等函数设定值域矩形可能无法完整显示

p+annotation_raster(raster=m1, xmin=1, xmax=9, ymin=1, ymax=7)

## 要让渐变更加平滑需设定interpolate=TRUE图6-1-1b

p+annotation_raster(m1, xmin=1, xmax=9, ymin=1, ymax=7, interpolate= TRUE)

##当将边界设置为正负无穷时可在不设置值域的情况下使矩形延展至面板边缘图6-1-1c

m2=matrix(color Ramp Palette(rainbow(10))(30))

p+annotation_raster(m1, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf, interpolate=TRUE)+

annotation_raster(m2, xmin=6, xmax=Inf, ymin=-Inf, ymax=3, interpolate=TRUE)

##图片亦可被当成raster对象放置图6-1-1d

img=image_read("box money.jpg")

alp=scales::alpha("khaki", seq(0.1, 1, length.out=20)) # 可在图片上再覆盖一个半透明渐变矩形以便于添加其他元素

alp=matrix(alp, nrow=1)

p+annotation_raster(img, xmin=0, xmax=10, ymin=0, ymax=8)+

annotation_raster(alp, xmin=0, xmax=10, ymin=0, ymax=8, interpolate= TRUE)

图6-1-1 左上=图a 设置边界,右上=图b 让渐变更加平滑,左下=图c 将边界设置为正无穷或负无穷,右下=图d 添加图片

##要使渐变更为平滑可使用plothelper包中的enlarge_raster函数增加每行或每列的颜色数在图6-1-2中相较于左边的图片右边的渐变因使用了更多颜色而更加平滑

m1=matrix(c("red", "red", "red", "red", "blue", "red", "red", "red","red"), nrow=3)

m2=enlarge_raster(m1, n=c(40, 50), space="Lab") # 将每行的颜色数增至40将每列的颜色数增至50颜色空间设为"Lab"也可为"rgb"

p+annotation_raster(m1, xmin=0.1, xmax=4.9, ymin=0.1, ymax=7.9, interpolate=TRUE)+ # 不增加颜色

annotation_raster(m2, xmin=5.1, xmax=9.9, ymin=0.1, ymax=7.9, interpolate=TRUE) # 增加颜色(www.xing528.com)

图6-1-2 使用enlarge_raster函数

## 颜色渐变的方式取决于矩阵中颜色的排列图6-1-3),这一点可通过以下示例中的m1m2m3m4显示出来

m1=color Ramp Palette(c("red", "dodgerblue3"))(3)

m1=matrix(c(

m1[1], m1[2],

m1[2], m1[3]), nrow=2, byrow=TRUE)

m1=enlarge_raster(m1, c(40, 40))

图6-1-3 通过颜色的排列改变渐变方式

set.seed(831); m2=sample(c("skyblue", "lightskyblue", "white","grey95", "grey85"), 64, TRUE, prob=c(0.5, 0.1, 0.1, 0.1, 0.1))

m2=matrix(m2, nrow=8)

m2=enlarge_raster(m2, c(144, 144))

m3=matrix(

c("pink", "pink", "pink", "pink",

"pink", "white", "white", "pink",

"pink", "white", "white", "pink",

"pink", "pink", "pink", "pink"), nrow=4, byrow=TRUE)

m3=enlarge_raster(m3, c(40, 40))

##使用plothelper包中的shading_raster函数可以生成围绕中心点的渐变

m4=shading_raster(nr=41, nc=41, middle=c(1, 21), palette=c("khaki1","grey15"), FUN=sqrt) # 此处参数的含义是生成一个41行和41列的矩阵单元格[1, 21]设为中心并将其颜色设为"khaki1"其他单元格中的颜色取决于它们与这个中心的距离距离越远颜色越偏向"grey15"但在分配颜色前距离值会被sqrt函数开方参数FUN指向任意只带一个参数的函数

p+annotation_raster(m1, xmin=0.1, xmax=4.9, ymin=0.1, ymax=3.9, interpolate=TRUE)+

annotation_raster(m2, xmin=5.1, xmax=9.9, ymin=0.1, ymax=3.9, interpolate=TRUE)+

annotation_raster(m3, xmin=0.1, xmax=4.9, ymin=4.1, ymax=7.9, interpolate=TRUE)+

annotation_raster(m4, xmin=5.1, xmax=9.9, ymin=4.1, ymax=7.9, interpolate=TRUE)

plothelper包中的geom_multi_raster能够代替annotation_raster,并可同时绘制多个渐变矩形,但它使用的数据必须是由tibble包生成的数据框。

dat=tibble::tibble(xmin=c(0.1, 5.1), xmax=c(4.9, 9.9), ymin=c(0.1, 0.1), ymax=c(4.1, 4.1), r=list(m1, m2))

p+geom_multi_raster(data=dat, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, raster=r), flip=FALSE) # 如果使用coord_flip函数需同时将flip设为TRUE

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈