R數(shù)據(jù)可視化19:環(huán)狀條形圖

之前我們已經(jīng)講過很多條形圖啦茂嗓,但是今天我們再來講一種條形圖——環(huán)狀條形圖(Circular barplot)档冬。當厭倦普通的條形圖的時候或者空間有限但是要展示較多樣本的時候讼撒,都可以考慮使用環(huán)狀條形圖浓瞪。

什么是環(huán)狀條形圖(Circular barplot)

條形圖是科研中常用的圖煎娇,但是有時候可能你會覺得普通的條形圖過于平平無奇姥闭。還有些時候展示的空間有限丹鸿,數(shù)據(jù)卻很龐大,這時再用普通的條形圖可能就不利于展示信息了棚品。那么要怎么辦呢靠欢?不如考慮一下使用環(huán)狀條形圖。我們先來看幾個關(guān)于環(huán)狀條形圖的例子铜跑。

2個月前门怪,人民日報使用了環(huán)狀條形圖展現(xiàn)了全球的疫情狀況,直觀的同時還很美觀疼进。

人民日報:截止北京時間3月11日12時 世界疫情地圖

這是另一個例子薪缆,關(guān)于森林覆蓋率和人口密度。每一根柱子代表一個州伞广,綠色的柱子代表森林覆蓋率拣帽,灰色的代表人口密度。

森林覆蓋率與人口密度

通過上面兩個例子可以發(fā)現(xiàn)環(huán)狀條形圖是一種明明很簡單嚼锄,但是卻讓你眼前一亮减拭,覺得好像是種很華麗的數(shù)據(jù)展現(xiàn)方式。那么要如何作圖呢区丑?

如何作環(huán)狀條形圖

1)需要什么樣的數(shù)據(jù)
我們這次使用的數(shù)據(jù)以及代碼來源Azandis的博客拧粪。我根據(jù)最終的圖片修陡,整理了所需要的數(shù)據(jù)。

TP<-read.table('~/Desktop/dat.txt',header = T,sep='\t',stringsAsFactors = F,check.names = F)
head(TP)
State Trees  Pop
1    CT    73  7.4
2    MA    71  8.4
3    RI    70 10.2
4    NY    65  4.1
5    PA    66  2.8
6    VA    67  2.0

2)如何作圖
我們將使用ggplot函數(shù)進行作圖可霎,首先我們來看看怎么把普通的柱狀圖變成環(huán)形的魄鸦。
為了能夠滿足Tree和Pop分開的效果,我們需要把Pop的數(shù)值變成負數(shù)癣朗。

library(tidyverse)
TP<-read.table('~/Desktop/dat.txt',header = T,sep='\t',stringsAsFactors = F,check.names = F)
head(TP)

#Pop值和Trees相比較小所以需要適當擴大10倍
TP <- mutate(TP, Pop.10 = Pop*10)
TP <- mutate(TP, Pop.10 = -Pop.10)

ggplot(TP, aes(x = State)) +
  geom_col(aes(y = Trees), fill = "#5d8402") +
  geom_col(aes(y = Pop.10), fill = "#817d79") +
  coord_polar()#變成環(huán)形

可以看到已經(jīng)有一點感覺了拾因,但是這個圖有點混亂。所以我們先對圖像中的State進行排序旷余。具體的排序規(guī)則參考了原blog的代碼绢记。

TP <- TP %>% mutate(TreeRank = rank(-Trees), PopRank = rank(-Pop)) %>% mutate(SqRank = (TreeRank^2)+(PopRank^2)/2) %>% mutate(RankOrder = rank(SqRank))

ggplot(TP, aes(x = reorder(State, RankOrder))) +
  geom_col(aes(y = Trees), fill = "#5d8402") +
  geom_col(aes(y = Pop.10), fill = "#817d79") +
  geom_text(aes(y = 100, label = State)) +
  coord_polar()+
  theme_void()

排序后的環(huán)形圖

然后我們在之前的基礎(chǔ)上標記上數(shù)值:

ggplot(TP, aes(x = reorder(State, RankOrder))) +
  geom_col(aes(y = Trees), fill = "#5d8402") +
  geom_text(aes(y = ifelse(Trees >= 15, 8, (Trees + 10)), color = ifelse(Trees >= 15, 'white', '#5d8402'), label = round(Trees, 2)), size = 2.5)+#ifelse(test, yes, no),所以這里代表Trees如果大于等于15時,y=8正卧,顏色為白色蠢熄,如果小于15則y為Trees+10,顏色為綠色
  geom_col(aes(y = Pop.10), fill = "#817d79") +
  geom_text(aes(y = ifelse(Pop.10 <= -15, -8, (Pop.10 - 10)), color = ifelse(Pop.10 <= -15, 'white', '#817d79'), label = round(Pop, 1)), size = 2.5)+#Pop.10小于等于-15時炉旷,y=-8签孔,顏色為白色,當Pop.10大于-15時砾跃,y=Pop.10-10骏啰,顏色為綠色
  geom_text(aes(y = ifelse(Trees <= 50 , 60, Trees + 15), label = State),size=3) +
  coord_polar() +
  scale_y_continuous(limits = c(-150, 130)) +#y軸的范圍為-150到130
  scale_color_identity() +
  theme_void() 

保存后我們可以去AI中進行最后的調(diào)整,比如加上中間的字抽高。
左上角的圖可以用下述代碼進行制作判耕。為了偷懶我就copy原文中的代碼,沒有調(diào)整參數(shù)翘骂,而是在AI中進一步調(diào)整的壁熄。

ggplot(TP, aes(x = Pop, y = Trees)) +
  geom_point(size = 3) +
  theme_minimal()
raw image

然后在AI中一番修改,坐標用了Arial字體碳竟,標題等用了NewsGoth Lt BT Light(感覺和原圖比較相似)草丧。根據(jù)原圖添加了相關(guān)的坐標軸名稱等,然后把兩張圖拼接在了一起莹桅。(有一些細節(jié)比如左上角還根據(jù)地理位置對點進行了劃分昌执,我就忽略啦)

今天的分享就到這里啦。

往期R數(shù)據(jù)可視化分享
R數(shù)據(jù)可視化18:弧形圖
R數(shù)據(jù)可視化17:烧┢茫基圖
R數(shù)據(jù)可視化16:啞鈴圖
R數(shù)據(jù)可視化15:傾斜圖 Slope Graph
R數(shù)據(jù)可視化14:生存曲線圖
R數(shù)據(jù)可視化13:瀑布圖/突變圖譜
R數(shù)據(jù)可視化12: 曼哈頓圖
R數(shù)據(jù)可視化11: 相關(guān)性圖
R數(shù)據(jù)可視化10: 蜜蜂圖 Beeswarm
R數(shù)據(jù)可視化9: 棒棒糖圖 Lollipop Chart
R數(shù)據(jù)可視化8: 金字塔圖和偏差圖
R數(shù)據(jù)可視化7: 氣泡圖 Bubble Plot
R數(shù)據(jù)可視化6: 面積圖 Area Chart
R數(shù)據(jù)可視化5: 熱圖 Heatmap
R數(shù)據(jù)可視化4: PCA和PCoA圖
R數(shù)據(jù)可視化3: 直方/條形圖
R數(shù)據(jù)可視化2: 箱形圖 Boxplot
R數(shù)據(jù)可視化1: 火山圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懂拾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铐达,更是在濱河造成了極大的恐慌岖赋,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓮孙,死亡現(xiàn)場離奇詭異唐断,居然都是意外死亡选脊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門脸甘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恳啥,“玉大人,你說我怎么就攤上這事斤程〗谴纾” “怎么了菩混?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵忿墅,是天一觀的道長。 經(jīng)常有香客問我沮峡,道長疚脐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任邢疙,我火速辦了婚禮棍弄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疟游。我一直安慰自己呼畸,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布颁虐。 她就那樣靜靜地躺著蛮原,像睡著了一般。 火紅的嫁衣襯著肌膚如雪另绩。 梳的紋絲不亂的頭發(fā)上儒陨,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音笋籽,去河邊找鬼蹦漠。 笑死,一個胖子當著我的面吹牛车海,可吹牛的內(nèi)容都是我干的笛园。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼侍芝,長吁一口氣:“原來是場噩夢啊……” “哼研铆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起竭贩,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚜印,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后留量,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窄赋,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡哟冬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忆绰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浩峡。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖错敢,靈堂內(nèi)的尸體忽然破棺而出翰灾,到底是詐尸還是另有隱情,我是刑警寧澤稚茅,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布纸淮,位于F島的核電站,受9級特大地震影響亚享,放射性物質(zhì)發(fā)生泄漏咽块。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一欺税、第九天 我趴在偏房一處隱蔽的房頂上張望侈沪。 院中可真熱鬧,春花似錦晚凿、人聲如沸亭罪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽应役。三九已至,卻和暖如春哲银,著一層夾襖步出監(jiān)牢的瞬間扛吞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工荆责, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滥比,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓做院,卻偏偏與公主長得像盲泛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子键耕,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355