前言
这篇小教程主要介绍ggplot2的一些作图技巧,包括一些主题theme的一些细节设定,虽然ggtheme包括许多的主题,但有时我们也想要自己设置效果,让自己的图看起来与众不同。
导入所需的包
library(data.table)
library(ggplot2)
library(leafletCN)
本文主要用到的包就是这几个。
站点分布绘图
首先我们对站点数据进行分析。
geo <- fread('geo_clean.csv')
一个有七个字段,大概长这样子。
我想看看站点的大致分布,这时我们需要一个底图,由于我不想导入外部文件了,我用了郎大为leafletCN中的地图。
filePath_p <- system.file("geojson/china.json",package = "leafletCN")
province <- read.geoShape(filePath_p)
接下来就可以绘制我们的分布地图了。
ggplot()+
geom_point(data = geo, aes(lon,lat,color=province))+
geom_path(data=province, aes(long,lat,group=group))+
coord_map()
默认画出来的图是这样的,总觉得不太好看,于是我们就可以设置自己的主题了,我个人喜欢暗色调背景。
mytheme <- function(){
theme(text = element_text(family = 'STHeiti',color='gray80'), # 字体及颜色
axis.text = element_blank(), # 去掉坐标刻度
axis.title = element_blank(), #去掉坐标标题
plot.background = element_rect(fill="gray20"),
panel.background = element_rect(fill="gray20"),
panel.border = element_rect(fill=NA, color="gray20", size=0.5, linetype="solid"), # 设置所有背景色
panel.grid = element_blank(),
axis.line = element_blank(),
axis.ticks = element_blank(), # 去掉辅助线及坐标线
legend.background = element_rect(fill = 'gray20'),
legend.key = element_rect(fill = 'gray20', color = 'gray20')) # 图例背景色
}
重新绘图,我们将地图线条设为亮色调,看起来比较舒服。
ggplot()+
geom_point(data = geo, aes(lon,lat,color=province),size=0.6)+
geom_polygon(data = province, aes(long,lat,group=group),
fill='transparent',color='gray80',size=0.1)+
coord_map()+
mytheme()
站点数量绘图
有了以上设置样式,我想知道每个省的站点数量,用柱状图来表示。
# 统计站点数目(此处为国控站点数目)
bar <- as.data.frame(table(geo$province))
names(bar) <- c('province','number')
ggplot(data = bar,aes(province,number,fill=province))+
geom_bar(stat = 'identity')+
geom_text(aes(label=number, vjust = -0.4, hjust = 0.5),color='gray80')+
theme(plot.background = element_rect(fill="gray20"),
panel.background = element_rect(fill="gray20"),
panel.border = element_rect(fill=NA, color="gray20", size=0.5, linetype="solid"),
panel.grid = element_blank(),
axis.line.x = element_line(color = 'gray80'),
axis.line.y = element_blank(),
axis.title = element_blank(),
axis.ticks = element_line(color = 'gray80'),
axis.ticks.y = element_blank(),
axis.text = element_text(family = 'STHeiti',color = 'gray80',angle = 90),
axis.text.y = element_blank(),
legend.position = 'none')
空气aqi绘图
知道了以上主题设置,我们导入空气aqi数据,就可以绘制出以下精彩图形。
aqidata <- fread('cityaqi_2015.csv')
首先来看每一天的空气aqi状况,我们筛选出几个典型城市。这里用了一个渐变色viridis,需要倒入viridis包,这里的主题仿造上面设置即可。
ggplot(tmp,aes(date,aqi,color=aqi)) +
geom_point(alpha=0.6,size=0.6)+
scale_x_date(date_breaks = "4 month",
date_labels = '%m-%d') +
facet_wrap(~region,nrow = 2,labeller = label_value)+
scale_color_viridis()+
xlab('date') + ylab('') +mytheme()
可以看出北京,石家庄,武汉等城市空气质量不好的天数远高于其他城市,普遍集中在1月份和12月份,我们还可以做一个热力图来观察下。
热力图
ggplot(hotdata[hotdata$type=='AQI',], aes(province, month, fill = value)) +
geom_tile(colour="white", size=0.1, stat="identity") +
scale_fill_viridis(option="D",name='AQI') +
scale_y_continuous(expand = c(0,0),breaks = 1:12,labels = c('一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月')) +
ggtitle('2015全国各省市AQI月度热力图') +
mytheme()
后记
最后留一张空间分布给大家去实现,感受ggplot2的可创造性。更多作图细节及源代码可关注我的公众号‘曲图工作室’。