如何制作玫瑰图-ggplot2-R

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

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

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

image.jpeg

人民日报的图

想想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)
image.png

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

# 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)
image.png

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

实践流程

准备数据,以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
image.png

将坐标系换成极坐标系

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

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

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

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

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
image.png

对比下人民日报的原图:

image.jpeg

人民日报的图

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

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

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

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())
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 风雨中屹立不倒 霜雪中巍然挺拔 内心其实早已被侵蚀 却佯装的如此若无其事 我愿意领略你的风采 默许你伪装的这般傲娇...
    周小锦阅读 307评论 10 12
  • 新建数据表映射过来的对象 main--dataobject--ProductInfo.java DAO层 main...
    谢谢水果阅读 111评论 0 0
  • 今日《圣经》金句: 你们要谨慎自守,免去一切的贪心,因为人的生命不在乎家道丰富。 (路加福音 12:15 和合本)...
    得鱼文化永奎阅读 2,091评论 0 0
  • 在浩瀚的大海深处,有个鱼儿的王国。海王有6个美丽的女儿,尤其是小女儿比姐姐们更美丽,她善良纯洁,有着美妙动...
    Nick0321阅读 1,826评论 0 2
  • 本周完成小画4幅,共47幅。 “我就这样了”,这句话我至少听到过不止一次。 第一次是我妈,有一次她跟我说跟着电视里...
    木子小的屋阅读 317评论 1 0