來穿插一下工作上應用到的視覺化技能
其實我是寫python的,前陣子才開始玩PowerBI,PowerBI雖然支援Python,但是對於matplotlib畫的地圖卻只支持桌機版(而且還是要在桌機版中開啟瀏覽器才可以看,在PowerBI內中的dashboard看不到QQ
失望之餘,想說就先來做好UI,我就開始找了PowerBi上各種神人做的dashboard來參考,赫然發現PowerBI有支援ggplot!!!!!!!!!!!PowerBI竟然支援R比支援Python還要多!!!!!!!!!!!怎麼會這樣~~~但是發現想做的事情有辦法做到後,用R畫圖好像就變得非常有動力?
其實因為Python的dataframe是從R過來的觀念,只要大概知道這些概念,換個語言其實不難der~
以下是畫出圖的程式碼~
由於PowerBI會幫你把你所選的features包成一個dataset給你,所以以下的dataset就是PowerBI幫我包好的囉~
我的dataset中有Country_Name(string), num_qty_GR(float), Lat(float), Lon(float)
library(maps) #map包中有各種地圖
library(mapproj)
library(ggplot2)
library(dplyr) #清資料用的
library(colorRamps) #畫圖有好看的顏色用的
library(ggrepel) #避免地圖上的label重複用的包
map <- map_data("world") #我用世界地圖
#distinct(map, region, subregion) #check distinct value of region/subregion, function "distinct" is from dplyr
new_map = map[map$region!="Antarctica",] #select rows that region is not Antarctica
#ggplot(new_map, aes(x=long,y=lat,group=group))+geom_polygon(fill="white") #畫出來看看有沒有成功
qty_map <- left_join(new_map, dataset, by = c("region"="Country_Name"), copy = FALSE) #因為我要拿世界地圖當底圖,但是要在上面按照我的數據塗出深淺不一的顏色,所以要把兩者的dataframe合併。
ggplot(qty_map, aes(x=long,y=lat, group=group, fill=num_qty_GR, colour=num_qty_GR)) +
scale_fill_gradient(low = "darkred", high="darkgreen") +
geom_polygon(color = "white") + #地圖上要塗的顏色
geom_label_repel(data=subset(qty_map, num_qty_GR>=0.1 | num_qty_GR <=-0.15), aes(x=Lat, y=Lon, label=paste(country_ISO3,num_qty_GR))) + #這裡針對num_qty_GR低於或高於某種程度的數值才給予標籤顯示,不然全部打上很亂
#geom_label(data=subset(qty_map, num_qty_GR>=0.1 | num_qty_GR <=-0.15), aes(x=Lon, y=Lat, label=paste(country_ISO3,num_qty_GR)), size=5, fill = "white") +
scale_colour_gradientn(colours=rev(green2red(5)),guide=FALSE)+ #guide=False是不要在圖上顯示,因為這裡我只是要給標籤上色而已
coord_map(xlim=c(-180,180)) +
coord_fixed(1.2) + #可以調整X軸跟Y軸的比例
labs(title ="World Map") +
theme_classic() +
labs(x=NULL, y=NULL) +
theme(panel.border = element_blank()) +
theme(panel.background = element_blank()) +
theme(axis.ticks = element_blank()) +
theme(axis.text = element_blank())
我覺得從python來寫R,最有趣的地方是ggplot可以一路加下去XD這也太妙了
然後發現在畫圖方面(這次只有接觸到地圖),R的包比Python包齊全好多
明天補圖XD