来自博主个人公众号,原文链接:在这里
人民日报公众号在疫情期间推送的消息,有几副图大家肯定见了不止一次。
尤其是下边这副,无论是大小、颜色还是视角效果,都很棒,可读性很强!
人民日报的图
想想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())