前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言可视化——极坐标变换与衍生图表类型

R语言可视化——极坐标变换与衍生图表类型

作者头像
数据小磨坊
发布2018-04-11 14:32:44
1.7K0
发布2018-04-11 14:32:44
举报
文章被收录于专栏:数据小魔方数据小魔方

今天这篇内容会比较杂乱一点,因为会讲到ggplot函数中的一大类通过极坐标支持才能呈现出来的图表效果。

ggplot作图背后的图表哲学,没有给予饼图(以及衍生出的圆环图、玫瑰图等放射状图表类型)存在的空间(主要是该包的开发者个人的审美观,比较反感次坐标轴以及功能类型雷同的重复性图层函数,所以它宁可开发出分面图层原理也不愿意增加次坐标轴,不愿意为原本柱形图可以表达的图表形式再单独开发一种功能雷同的饼图函数)。

但是巧的是,在常见的三种坐标形式中,极坐标转换可以非常轻松的将常见的柱形图(条形图)、堆积柱形图通过只一句极坐标函数就神奇的转化为饼图、玫瑰图、圆环图等(不知道是有意为之还是偶然的巧合)。

饼图需要借助柱形图结合极坐标进行转化:

ggplot(diamonds,aes(x=factor(1),fill=cut))+geom_bar()

当使用一个因子变量作为横轴,使用分类变量进行填充时,该柱形图变成了单条堆积柱形图。

接下来我们通过以上函数添加极坐标(注意极坐标的设定是如何影响最终的图表形式的)

ggplot(diamonds,aes(x=factor(1),fill=cut))+geom_bar()+coord_polar(theta = "y")

ggplot(diamonds,aes(x=factor(1),fill=cut))+geom_bar()+coord_polar(theta = "x")

ggplot(diamonds,aes(x=factor(1),fill=cut))+geom_bar()+coord_polar()

从做出的图表以及极坐标函数内的参数我们可以看出来,当参数指定为x时,最终柱形图的x轴会被指定为极坐标的x轴(圆周),而柱形图的y轴则会成为极坐标的y轴(半径)。当指定为y轴时,柱形图的y轴为成为极坐标的x轴(圆周),柱形图的x轴会成为极坐标的y轴(半径)。

同时极坐标状态下,饼图的半径是由柱形图柱形图宽度决定的,以上图表中圆心有个空白,如果我们将柱形图柱形图宽度定义为1,则会成为正圆。

ggplot(diamonds,aes(x=factor(1),fill=cut))+geom_bar(width=1)+coord_polar(theta = "y")

图中其他的元素控制方式与往常的柱形图做法一样:

去掉极坐标轴的轴刻度标签,去掉两个轴标题、更换配色:

ggplot(diamonds,aes(x=factor(1),fill=cut))+geom_bar(width=1)+coord_polar(theta = "y",start=0)+theme(panel.grid = element_blank(),panel.background = element_blank(),axis.text = element_blank(),axis.ticks = element_blank(),axis.title = element_blank())+scale_fill_brewer(palette="Blues")+guides(fill=guide_legend(reverse=TRUE,title=NULL))

当有多个序列时:

ggplot(diamonds,aes(cut))+geom_bar(width=1)

通过极坐标转换可以实现圆环图、圆条图效果:

ggplot(diamonds,aes(cut))+geom_bar(width=1,fill="steelblue",colour="white")+coord_polar(theta = "y",start=0)+theme(panel.grid = element_blank(),panel.background = element_blank(),axis.text.x = element_blank(),axis.title = element_blank())

改变极坐标轴参数设置,可以模拟南丁格尔玫瑰图效果:

ggplot(diamonds,aes(cut))+geom_bar(width=0.95,fill="#3182BD")+coord_polar(theta = "x",start=0)+theme(panel.grid = element_blank(),panel.background = element_blank(),axis.text.y = element_blank(),axis.ticks= element_blank(),axis.title = element_blank())+ylim(c(-3000,22500))

当然如果你使用的原始柱形图数据中添加了分类序列(也就是堆积柱形图),按照上面的方式可以制作更加复杂的圆环图、堆叠玫瑰图

ggplot(diamonds,aes(x=color,fill=cut))+geom_bar(width=0.95,colour="white")+coord_polar(theta = "y",start=0)+theme(panel.grid = element_blank(),panel.background = element_blank(),axis.text.x = element_blank(),axis.title = element_blank())+scale_fill_brewer(palette="Blues")+guides(fill=guide_legend(reverse=TRUE,title=NULL))

ggplot(diamonds,aes(x=color,fill=cut))+geom_bar(width=0.95,colour="white")+coord_polar(theta = "x",start=0)+theme(axis.text.y = element_blank(),axis.title = element_blank())+scale_fill_brewer(palette="Blues")+guides(fill=guide_legend(reverse=TRUE,title=NULL))+ylim(c(-2000,12000))+theme_bw()

尝试着用分面来解决多序列问题:

ggplot(diamonds,aes(x=color,fill=cut))+geom_bar(width=0.95,colour="white")+coord_polar(theta = "x",start=0)+theme(axis.text.y = element_blank(),axis.title = element_blank())+scale_fill_brewer(palette="Blues")+guides(fill=guide_legend(reverse=TRUE,title=NULL))+ylim(c(-2000,6000))+theme_bw()+facet_grid(.~cut)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档