这篇文章主要介绍“R语言可视化实现图表嵌套”,在日常操作中,相信很多人在R语言可视化实现图表嵌套问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”R语言可视化实现图表嵌套”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
之前在学习ggplot的时候,一直存在着一个困惑。
就是这个函数是否允许两个做出来的两个相关图表重叠嵌套(也就是在一个大图(主图)的边缘位置,放置另一个缩小版的小图)。
这个想法很奇葩,本来想着没啥希望,鉴于该包的开发者那犀利的审美观,估计也不能允许这种情况的发生。
不过最近浏览一位大神的博客,真的有这种情况的解决措施,喜出望外,赶紧在这里分享给大家。
不过他的处理方式不是通过ggplot的内置函数,而是通过grid包中的viewport函数来实现的:
以下是具体的实现步骤:
加载包:
library(ggplot2) #用于画图,主图和附图都使用ggplot的内置数据集
library(grid) #用于设定附图的长宽及叠放在主图的精确位置
加载并预览数据集:
这里我们还是使用关于钻石的那个数据集(之前的图表案例很多都是使用该数据集)
data(diamonds)
head(diamonds)
#制作复合图的主图:
chart1<-ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+theme(legend.position=c(0.9,0.72),legend.background=element_rect(I(0)))
以上函数可以制作出以carat和price为主要对应关系的散点图,同时分类变量cut通过颜色映射进行区分。最后调整了图例位置和图表背景。
#设定附图长宽及其最终落在主图上的精确位置:
vie<-viewport(width=0.669,height=0.4,x=0.7,y=0.306)
#制作附图
chart2 <-ggplot(diamonds,aes(depth,fill=cut,alpha=.2))+geom_density()+xlim(54,70) +
theme(axis.text.y=element_text(face="bold",colour="black"),
axis.title.y=element_blank(),
axis.text.x=element_text(face="bold",colour="black"),
plot.background=element_rect(I(0),linetype=0),
panel.background=element_rect(I(0)),
panel.grid.major=element_line(colour=NA),
panel.grid.minor=element_line(colour=NA),
legend.background=element_rect(I(0),linetype=1),
legend.position=c(0.85,0.72))
chart2 #预览附图
因为附图要放置在主图边缘并且缩放很大比例,为了防止其背景和网格线系统遮挡主图的重要信息,对其主题元素进行了大量的简化。
将主图与附图合成一并显示:
print(chart2,vp=vie)
将以上代码打包组合:
chart1<-ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+theme(legend.position=c(0.9,0.72),legend.background=element_rect(I(0)))
chart1
vie<-viewport(width=0.669,height=0.4,x=0.7,y=0.306)
chart2 <-ggplot(diamonds,aes(depth,fill=cut,alpha=.2))+geom_density()+xlim(54,70) +
theme(axis.text.y=element_text(face="bold",colour="black"),
axis.title.y=element_blank(),
axis.text.x=element_text(face="bold",colour="black"),
plot.background=element_rect(I(0),linetype=0),
panel.background=element_rect(I(0)),
panel.grid.major=element_line(colour=NA),
panel.grid.minor=element_line(colour=NA),
legend.background=element_rect(I(0),linetype=1),
legend.position=c(0.85,0.72))
print(chart2,vp=vie)
其实仔细看这种做法,里面也不外乎图层叠加,先做出主图,然后通过viewport函数将附图缩小并叠加到主图上,不过这种方式用来展示一些需要多角度透视的数据分布问题还是很合适的,而且因为是依赖于不同的包,所有主图与附图之间没有严格的类型限制,你所需要做的只是调整好两个图表的位置与大小,别让彼此相互遮挡掩盖重要信息就OK了。
下面我将附图的类型更换为堆积直方图大家看下效果:
chart1<-ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+theme(legend.position=c(0.9,0.72),legend.background=element_rect(I(0)))
chart1
vie<-viewport(width=0.669,height=0.4,x=0.7,y=0.306)
chart2 <-ggplot(diamonds,aes(depth,fill=color))+geom_histogram()+xlim(54,70) +
theme(axis.text.y=element_text(face="bold",colour="black"),
axis.title.y=element_blank(),
axis.text.x=element_text(face="bold",colour="black"),
plot.background=element_rect(I(0),linetype=0),
panel.background=element_rect(I(0)),
panel.grid.major=element_line(colour=NA),
panel.grid.minor=element_line(colour=NA),
legend.background=element_rect(I(0),linetype=1),
legend.position=c(0.85,0.72))
print(chart2,vp=vie)
到此,关于“R语言可视化实现图表嵌套”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。