本例用ggplot來繪製商業圖表仿的第025號案例,地圖上的迷你柱形圖。
要繪製這種地圖上的小柱形圖,據說可以使用ggsubplot包,不過這裡還是使用原來案例裡的思路來繪製,也很簡單,就是一層一層地去繪製。
作圖思路:先根據地圖文件繪製地圖底圖,再根據各省坐標,一次左右偏移一點,一次右偏移一點,分別繪製兩組誤差線作為柱形圖,誤差線的長度根據兩年指標按比例折算。最後標註省名和百分比數據標籤。
library(maptools)
library(ggplot2)
library(plyr)
china_shp = readShapePoly("c:/rstudy/bou2_4p.shp") # 讀取地圖空間數據
china_map <- fortify(china_shp) #轉化為數據框
#註:這個空間文件裡的地圖默認投影是很扁的,但不能像前面一樣使用coord_map("polyconic")來調整,因為這會影響後面誤差線畫的柱形圖也被扭曲。因此最好能找到默認投影就是polyconic方式、且經緯度仍保持未轉換的空間文件。如哪位朋友有,煩請提供一下,先謝了。
#讀取各省業務數據。只有部分省份。
mydat <- read.csv("c:/rstudy/mapbar.csv")
#讀取省會城市坐標
province_city <- read.csv("c:/rstudy/chinaprovincecity.csv")
#省的業務數據和坐標數據合併。
province_dat <- join(province_city,mydat,type="right")
以上兩步也可以在excel中先準備好,再一次讀取進來。
#分層繪製圖表
ggplot()+
geom_polygon(aes(x=long, y=lat, group=group), data=china_map, fill="beige", colour="grey60") + #畫地圖底圖
geom_errorbar(aes(x=jd-0.5, ymin=wd, ymax=wd+zhibiao2014/max(zhibiao2014, zhibiao2015)*5), data=province_dat, size=5, color="steelblue", width=0, alpha=0.8)+ #誤差線畫柱形圖,x左偏0.5
geom_errorbar(aes(x=jd+0.5, ymin=wd, ymax=wd+zhibiao2015/max(zhibiao2014, zhibiao2015)*5), data=province_dat, size=5,color="orange", width=0, alpha=0.8)+ #誤差線畫柱形圖,x右偏0.5
geom_text(aes(x=jd, y=wd-0.5, label=paste(province, ifelse(changepct >0 ,"▲","▼"), round(changepct,3)*100, "%", sep='')), data=province_dat)+ #標註省名
theme( #清除不需要的元素
panel.grid = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()
) +
annotate("text", x=80, y=25, label="● 2014", color= "steelblue", size=8) + #畫圖例
annotate("text", x=80, y=23, label="● 2015", color= "orange", size=8)
要實現上下三角箭頭紅綠分色,可以單獨進行繪製,這裡就略去了。
相比025案例的Excel做法,位置更精準科學,底圖、柱形圖的顏色樣式也都可以方便的自定義,美中不足的是空間文件的投影不佳。不過Excel做法的好處是可以根據數據情況、柱形圖文字的遮擋情況,隨時調整xy數據實現圖形偏移到合適位置。
ExcelPro圖表博客,專注於簡單實用、專業有效的商務圖表溝通方法。轉載請註明出處。
最新Excel商業圖表案例教程見第1季、第2季,屬於中高級程度,適合對E圖表品質要求高的朋友。提供xlsx源文件+pdf圖文教程+在線視頻演示3合1課程,點擊【閱讀原文】了解更多。
---
劉萬祥
微博:@劉萬祥ExcelPro
微信:iamExcelPro
博客:ExcelPro.blog.sohu.com
郵箱:ExcelPro2008@gmail.com