R語言可視化——數據地圖離散百分比填充(環渤海)

案例用環渤海三省二市的地理數據。

library(ggplot2)

library(maptools)

library(plyr)

數據導入、轉換、抽取

CHN_adm2 <- readShapePoly("c:/rstudy/CHN_adm/CHN_adm2.shp")

CHN_adm2_1 <- fortify(CHN_adm2)

data1 <- CHN_adm2@data

data2 <- data.frame(id=row.names(data1),data1)

china_map_data <- join(CHN_adm2_1, data2, type = "full")

huanbohai <-subset(china_map_data,NAME_1==c("Beijing","Tianjin","Nei Mongol","Hebei","Shandong"))

建立業務數據:

huanbohai_perm<-data.frame(NAME_2=unique(huanbohai$NAME_2),zhibiao=rnorm(42,100,50))

huanbohai_perm$zhibiao<-round(huanbohai_perm$zhibiao,0)

write.table (huanbohai_perm, file ="C:/rstudy/huanbohai.csv", sep =",", row.names =FALSE)

業務數據導入及合併:

mydata<-read.csv("C:/rstudy/huanbohai.csv",header=T)

huanbohai_map_data <- join(huanbohai,mydata, type="full")

###將轉換的分段因子變數重新命名為我們需要的分段閥值:

huanbohai_map_data$fau <- cut(huanbohai_map_data$zhibiao, breaks = c(0,40,80,120,160,200))

huanbohai_map_data$fam<-factor(huanbohai_map_data$fau,levels=c("(0,40]","(40,80]","(80,120]","(120,160]","(160,200]"),labels=c("0~40","40~80","80~120","120~160","160~200"),order=TRUE)

離散顏色標度填充(實際值分段)

windowsFonts(myFont = windowsFont("微軟雅黑"))

ggplot(huanbohai_map_data, aes(x = long, y = lat, group = group,fill =fam)) +

geom_polygon(colour="white")+

scale_fill_brewer(palette="Greens") + ###Blues&Greens

coord_map("polyconic") +

ggtitle("某公司2015~2016年度營業狀況分布圖")+

guides(fill=guide_legend(reverse=TRUE,title=NULL))+

theme(

title=element_text(family="myFont"),

legend.text.align=1, ###圖例標籤右對齊

panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position = c(0.08,0.6)

)

以上是昨天在東三省填充地圖中所使用過的方法,接下來我解釋一種新的填充方案,通過將數量段轉換為百分比進行離散顏色標度填充:

離散顏色標度分割(百分比數量段):

qa <- quantile(na.omit(huanbohai_map_data$zhibiao), c(0,0.2,0.4,0.6,0.8,1.0))

huanbohai_map_data$zhibiao_q<-cut(huanbohai_map_data$zhibiao,qa,labels = c("0-20%", "20-40%","40-60%","60-80%", "80-100%"),include.lowest = TRUE)

levels(huanbohai_map_data$zhibiao_q)

[1] "0-20%" "20-40%" "40-60%" "60-80%" "80-100%"

通過將指標變數以分段百分比的方式進行分割,新建立一個百分比分段因子變數:

離散漸變(百分比)

windowsFonts(myFont = windowsFont("微軟雅黑"))

ggplot(huanbohai_map_data,aes(long,lat))+

geom_polygon(aes(group=group,fill=zhibiao_q),colour="white")+

scale_fill_brewer(palette="Greens")+

coord_map("polyconic") +

guides(fill=guide_legend(reverse=TRUE,title=NULL))+

ggtitle("某公司2015~2016年度營業狀況分布圖")+

theme(

title=element_text(family="myFont"),

panel.grid = element_blank(),

panel.background = element_blank(),

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position =c(0.2,0.7),

legend.text.align=1

)

###帶標籤

接下來處理標籤問題:

創建各城市中心地理坐標:

midpos <- function(data1) mean(range(data1,na.rm=TRUE))

centres <- ddply(huanbohai_map_data,.(city),colwise(midpos,.(long,lat)))

填充並添加標籤:

ggplot(huanbohai_map_data,aes(long,lat))+

geom_polygon(aes(group=group,fill=zhibiao_q),colour="white")+

scale_fill_brewer(palette="Greens")+

coord_map("polyconic") +

geom_text(aes(label=city),size =3,family="myFont",fontface="plain",data=centres) +

guides(fill=guide_legend(reverse=TRUE,title=NULL))+

ggtitle("某公司2015~2016年度營業狀況分布圖")+

theme(

title=element_text(family="myFont"),

title=element_text(family="myFont"),

panel.grid = element_blank(),

panel.background = element_blank(),

legend.text.align=1,

axis.text = element_blank(),

axis.ticks = element_blank(),

axis.title = element_blank(),

legend.position = c(0.2,0.7)

)

本文轉載自EasyCharts團隊成員公眾號——「數據小魔方」,轉載請註明出處

文件及代碼分享在QQ群共享中, 魔方學院QQ群:

我們EasyCharts團隊在網易雲課堂等你來上課哦,長按下面的二維碼就可進入網易學習課堂。本課程定價為19.9,在2017年1月11日前的打折優惠價為9.9

Excel商業圖表修鍊秘笈-基礎篇 - 網易雲課堂 (二維碼自動識別)

簡介

真正的高手,不是會製作高難度的圖表,而是能把最平常的圖表繪製出商務范!小菜鳥,老司機,都不容錯過本課程哦!

1. 這是Excel史上最全的基礎圖表類型講解;本課程重點講解了23個基礎圖表案例,包括Excel自動生成的柱形圖,條形圖,折線圖,面積圖,散點圖,餅圖,圓環圖、雷達圖,表格,卡片等常用商業圖表。

2. 這是Excel史上最全的商業圖表風格學習大全;本課程提供了5種商業圖表風格的圖表,包括《商業周刊》風格,《華爾街日報》風格1和2,《經濟學人》風格1和2,共5種經典商業雜誌圖表的風格。

3. 本課程包括了150多張張商業圖表演示Excel源文件。每個基礎圖表案例至少提供6種以上不同的圖表風格演示,供讀者選擇與學習,可以滿足不同人群的審美需求。

EasyCharts團隊出品

帥的人都關注了EasyCharts團隊^..^~

QQ交流群:454614789

微信公眾號:EasyCharts

更多信息敬請查看: easychart.github.io/pos


推薦閱讀:

R語言可視化——ggplot繪製中心密度輻射圖
R語言分析告訴你應避開哪個國家以躲避空難
MySQL入門及其與R的交互

TAG:R | 数据可视化 | 科研绘图 |