您好,登錄后才能下訂單哦!
如何分析ggplot2樹狀圖,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
2017年8月份的R語言更新包中,默默地加入了支持ggplot2樹狀圖的新幾何對象,從此在R語言中制作樹狀圖,不用再求助于第三方包的輔助了。
該包既有Cran上的正式發行版,也有托管在GitHub上的開發版,安裝方式如下:
CRAN:
install.package("treemapify")
Github:
devtools::install_github("wilkox/treemapify")
GitHub主頁:
https://github.com/wilkox/treemapify
載入本文章所需的擴展包:
library("ggplot2")
library("treemapify")
library("tweenr")
library("gganimate")
library("RColorBrewer")
安裝該包之后,你的ggplot2中會多出一個樹狀圖幾何對象——geom_treemap()。
實際上我曾經分享過一個樹狀圖案例,但是是使用第三方輔助包制作,一直在等ggplot2出樹狀圖圖層。
R語言數據可視化之——TreeMap
本次案例使用該(treemapify)包內的內置數據集:
預覽一下數據集結構:
str(G20)
head(G20)
該數據集描述20峰會參會國家的經濟指標,里面包含了五個字段,分別是全球的大區(region)、國家名稱(country)、GDP指標(gdp_mil_usd)(應該是二次計算的某種指標),人類發展指數(hdi),已經經濟發展程度(econ_classification)。
字段名稱 類型
region 因子型
country 因子型
gdp_mil_usd 數值型(整數)
hdi 數值型(浮點)
econ_classification 因子型
樹狀圖是沒有顯式坐標系統的一類特殊圖形,依靠正方化算法,將樣本總體正方形按照實際觀測值占總體比例分割成單個矩形方塊。因而其至少需要一個數值型變量作為輸入參數。
一個簡單的樹狀圖:
ggplot(G20, aes(area = gdp_mil_usd)) +
geom_treemap()
因為area僅僅是定義了一個數值型變量的方塊大小,填充顏色是可以單獨定義的。但是顏色往往也可以單獨作為一個數值型度量的表達方式。
ggplot(G20, aes(area = gdp_mil_usd)) +
geom_treemap(fill="steelblue")
ggplot(G20, aes(area = gdp_mil_usd, fill = hdi)) +
geom_treemap()+
scale_fill_distiller(palette="Greens")
添加標簽:
包作者針對ggplot樹狀圖寫了優化好的文本 標簽函數geom_treemap_text(剛開始就說過樹狀圖超越了傳統三大坐標系的范疇,沒有顯式聲明的坐標系統,算法比較特殊因而無法使用常規的geom_text()進行添加標簽)。
ggplot(G20, aes(area = gdp_mil_usd, fill = hdi, label = country)) +
geom_treemap() +
geom_treemap_text(fontface = "italic", colour = "red", place = "centre",grow = TRUE,alpha=.6)+
scale_fill_distiller(palette="Greens")
其中place參數控制每一個方塊中標簽相對于四周的位置,grow則控制標簽是否與方塊大小自適應(呈大致比例放大縮小)
次級分組(亞群):
該包支持次級分組(專業術語叫做亞群),這在實際應用場景中非常廣泛,比如我們在觀察國家指標大小的同時,還想獲取國家所屬大區的總體指標,通過加入次級分組,我們可以獲取兩個維度信息。通過在美學映射中設置subgroup參數(一個類別型變量),函數內部可以自動完成亞群的變量聚合計算,并在圖形成用框線顯示出次級類別大小的規模。
ggplot(G20, aes(area = gdp_mil_usd, fill = hdi, label = country,subgroup = region)) +
geom_treemap() +
geom_treemap_subgroup_border() +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.5, colour ="black", fontface = "italic", min.size = 0) +
geom_treemap_text(colour = "red", place = "topleft", reflow = T,alpha=.5)+
scale_fill_distiller(palette="Greens")
其中reflow參數用于控制標簽是否自適應矩形塊大小,若按照原始大小超過矩形塊,則會自動換行顯示。
分面系統:
當你覺得使用次級分組不能獲得一個很好地視覺呈現效果,geom_treemap還支持ggplot函數中的fact_grid分面參數,這就是所有ggplot2擴展函數的好處,可以繼承源自于ggplot2的高級圖形屬性。
ggplot(G20, aes(area = gdp_mil_usd, fill = region, label = country)) +
geom_treemap() +
geom_treemap_text(grow = T, reflow = T, colour = "black") +
facet_wrap( ~ econ_classification) +
scale_fill_brewer(palette="Blues")+
labs(
title = "The G-20 major economies",
caption = "The area of each country is proportional to its relative GDP within the economic group (advanced or developing)",
fill = "Region" )+
theme(legend.position = "bottom",
plot.caption=element_text(hjust=0))
GIF動畫流:
借助tweened包提供的差值方法,你可以實現將不同時間點的截面數據進行追加,并且編組成gganimate函數可識別的動畫幀組,通過tweenlength、statelength和nframes 參數來控制變化的長度、每一幀停留的時間以及切換的幀數。
G20_alt <- G20
G20_alt$gdp_mil_usd <- sample(G20$gdp_mil_usd, nrow(G20))
G20_alt$hdi <- sample(G20$hdi, nrow(G20))
tweened <- tween_states(list(G20,G20_alt,G20), tweenlength = 8, statelength = 5, ease = 'cubic-in-out', nframes = 30)
animated_plot <- ggplot(tweened, aes(area = gdp_mil_usd, fill = hdi,label = country, subgroup = region,frame = .frame)) +
geom_treemap(fixed = T) +
geom_treemap_subgroup_border(fixed = T) +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.5,colour = "black", fontface = "italic", min.size = 0,fixed = T) +
geom_treemap_text(colour = "white", place = "topleft", reflow = T, fixed = T)+
scale_fill_distiller(palette="Greens")
ani.options(interval = 1/10)
gganimate(animated_plot, "E:/animated_treemap.gif", title_frame = F,ani.width = 1000, ani.height = 800)
treemapify包給ggplot2提供的geom_treemap(),填補了ggplot2原生幾何對象在樹狀圖領域的空白,可謂是進一步擴展、豐富ggplot2生態系統。
關于如何分析ggplot2樹狀圖問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。