干货分享 | 给散点图镶上“小花边”
发布时间 2022-06-28
最常用也是最万能的绘图R包。
用于给散点图添加边际图。
hexbin包的hexbin函数应用于数据量太大、且有数据重叠、普通散点图可视化效果变差的情况。
install.packages("ggExtra") install.packages("hexbin") library(ggExtra) library(hexbin) library(ggplot2)
本文数据以R自带的diamonds数据为例,散点图的基本语法如下,数据集、X轴、Y轴,最后是散点层。
p <- ggplot(data=diamonds, mapping = aes(x = carat,y = price)) + geom_point(shape=19 ,alpha = .5,size=1.5)
一个最基础不加任何修饰的散点图就绘制好了,接下来要做的工作就是思考如何美化它。当数据量特别大,散点都堆叠在一起,很多区域很难辨识,我们可以考虑使用hexbin函数绘制高密度散点图。hexbin函数将二元变量的封箱放到六边形单元格中,且通过图例颜色标定每一个区域数据点的数量颜色越深则散点密度越大。
p <- ggplot(data=diamonds,mapping = aes(x = carat,y = price)) + geom_point(shape=19 ,alpha = .01,size=0.5)+ stat_binhex()
调整图片的细节
p <- ggplot(data=diamonds,mapping = aes(x = carat,y = price)) + geom_point(shape=19 ,alpha = .01,size=0.5)+ stat_binhex()+ scale_fill_gradient(low = "lightblue", high = "red",limits =c(0,6000)) + #设置映射颜色和图例尺度 theme_bw() + theme( legend.position = "left", #调整图例的位置 axis.title = element_text( family = "sans",size = 17,face = "bold",color = "gray25"),#设置X、Y轴标题字体、大小以及颜色 axis.text = element_text( family = "sans",size = 15,face = "bold"), #设置X、Y轴标签字体、大小以及颜色 title = element_text( family = " sans ",size = 20,face = "bold"), #设置图片标题的字体、大小以及颜色 plot.title = element_text(margin = margin(t = 10, b = 10)),#控制标题与图表之间的距离 axis.title.x = element_text(margin = margin(t = 15),family = "sans"), axis.title.y = element_text(margin = margin(r = 15) ,family = "sans"),#调整X、Y轴标题距离绘图区的距离 legend.title = element_blank(), #去除图例的标题 panel.border = element_rect( linetype = "solid", size = 2,color = "gray50") #绘图区外框颜色、线型以及粗细 ) + labs(title="Add marginal to scatter",hjust=0.5) + xlab("carat") + yl ab("price") #添加标题
边际图是叠加在散点图上的,它有多个类型可供选择。
参数解读:
p:之前绘制好的散点图
type:添加的边际图类型
density:密度曲线
histogram:直方图
boxpot:箱线图
violin:小提琴图
densigram:密度图与直方图的结合
margins:边际图添加在哪一方向
both:X、Y轴都添加
X:只添加X轴
Y:只添加Y轴
size:主图与边际图的比例关系
fill:填充颜色
color:描边颜色
p1 <- ggMarginal(p, type ="densigram", margins = "both", fill="#A7B9D7", color="steelblue")
一副完整的散点图加边际图就绘制好了。边际图也可以根据需要尝试各样的类型:
只添加X轴的密度图
ggMarginal( p, type = "density", margins = "x", fill = "#A7B9D7", color="steelblue")
只添加Y轴的小提琴图
ggMarginal( p, type = "violin", margins = "y", fill = "red", color="steelblue" )