geoRp的个人博客分享 http://blog.sciencenet.cn/u/geoRp

博文

制作玫瑰图-ggplot2-R

已有 3523 次阅读 2020-3-19 09:44 |个人分类:R编程|系统分类:科研笔记| 玫瑰图, ggplot

来自博主个人公众号,原文链接:在这里


人民日报公众号在疫情期间推送的消息,有几副图大家肯定见了不止一次。

尤其是下边这副,无论是大小、颜色还是视角效果,都很棒,可读性很强!

             人民日报的图

想想excel出来的条形图,我不禁打开了尘封了三天的电脑、R和firefox:

极坐标与玫瑰图

玫瑰图可以视为是条形图在极坐标系中的表达

利用ggplot实现的思路也是先构建bar(geom_bar),然后将坐标系转为极坐标系(coord_polar)

下边是官方文档给出的例子:

# A coxcomb plot = bar chart + polar coordinates

cxc <- ggplot(mtcars, aes(x = factor(cyl))) +

 geom_bar(width = 1, colour = "black")

 

multiplot(cxc,cxc + coord_polar(),cols=2)

             

这种思路也可以用在饼状图的制作中,不过饼状图需要以堆积的条形图为基础。

# A pie chart = stacked bar chart + polar coordinates

pie <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) +

geom_bar(width = 1)

multiplot(pie,pie + coord_polar(theta = "y"),cols=2)

             

理清了大致思路,我们着手进入实践。

实践流程

准备数据,以3月5日的疫情数据为例:

head(data0305)

##     X     省 省确诊       日期

## 1   1 广东省   1352 2020-03-05

## 2  34 河南省   1272 2020-03-05

## 3  52 浙江省   1215 2020-03-05

## 4 102 湖南省   1018 2020-03-05

## 5 126 安徽省    990 2020-03-05

## 6 154 江西省    935 2020-03-05

首先,构建条形图。并按照确诊人数排序,颜色(渐进色)填充,gg都hold不住的条形图

copl1=ggplot(data0305)+

 geom_bar(stat="identity",aes(y=省确诊,x=reorder(省, 省确诊),fill=省确诊)) #这里要reorder一下,让省按照省确诊来排列,不然参差不齐

copl1

             

将坐标系换成极坐标系

copl2=ggplot(data0305)+

 geom_bar(stat="identity",aes(y=省确诊,x=reorder(省, 省确诊),fill=省确诊))+ #如上,#这里要reorder一下,让省按照省确诊来排列,不然参差不齐

 coord_polar()

copl2

             

看起来有那么点意思了,再调调色试一下

 copl2+

 scale_fill_gradient(low='white',high='red')+ #渐变色填充,由白到红

 theme_bw()

             

调整下边框、坐标轴文本、图例

copl= copl2+scale_fill_gradient(low='white',high='red')+

 theme_bw()+

   theme(axis.text.y = element_blank(),

       axis.text.x = element_text(colour = 'black', face = 'bold',size = 9),

       panel.border = element_blank())+

 xlab(label = '')+ylab(label = '')+

 guides(fill=FALSE)

copl

             

对比下人民日报的原图:

             人民日报的图

此图明显不是渐进色的填充,根据不同地区选择了不同颜色;而且标签文本进行了相应的调整,需要耗费不少的精力。

然而,实践中的出图已经达到了神似的水平,为下一步打磨奠定了坚实的基础。。。。

尤其是加上指示标签后,不是吗

copl+geom_text_repel(aes(label = 省, y = 省确诊,x=省),size=3)+

 theme(axis.text.y = element_blank(),

       axis.text.x = element_text(colour = 'white', face = 'bold',size = 2),

       panel.border = element_blank())

             




https://blog.sciencenet.cn/blog-3343669-1224233.html

上一篇:"hmgeo"R包更新:新增熵权法、偏离份额分析函数
下一篇:理解中国的城市区域化:珠江三角洲的功能与制度空间结构及其关系(一)
收藏 IP: 223.88.196.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-26 21:36

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部