【R語言】多層餅圖

需求是推動探索的重要動力!在學習的路上口渔,很多東西都是從需求出發(fā)的样屠!帶著目的去探索,能夠更快地找到與之對應的解決方法缺脉。上個周痪欲,同學問我能不能畫這樣一個圖:

靈魂畫手小藍哥.jpg

大概的意思就是先展示3個大類的百分比,再展示每個大類里面的小類的百分比枪向。


回到實驗室就Google一下勤揩,但是沒有現(xiàn)成的例子。也看了比較主流的幾款繪圖軟件秘蛔,貌似都沒有現(xiàn)成的解決辦法陨亡。就在要放棄的時候,突然想到Excel說不定可以呢深员,那就試試吧负蠕!

2.png

可是這也不對啊>氤U谔恰!5汀S恕!0鸥拧H弧!

PPT啊罢洲,PPT可以拼圖疤吖省!Excel畫的圖在PPT里面肯定是可以編輯的惹苗,那就可以盡情的放大縮小換顏色暗罱稀!

1.png

那能不能用R語言來實現(xiàn)呢桩蓉?

真的是不知道怎么實現(xiàn)啊淋纲,嘗試了很多遍,還是不行院究!就在這時候帚戳,朋友圈一個老師分享了這個圖:

來自基因課張旭東老師朋友圈

簡直就是我想要的圖扮杌颉!

看到使用的是兩個數(shù)據(jù)集片任,猜想是把兩個數(shù)據(jù)集進行拼接得到的!簡單搜索一下蔬胯,發(fā)現(xiàn)使用ggplot2繪制餅圖的原理是先畫百分比柱狀圖再將直角坐標系轉換成極坐標对供!那也就意味著只需要將兩個柱狀圖挨著畫,然后轉換坐標系就??了氛濒!

最難的地方是標簽的位置产场!理清思路,水到渠成舞竿!

.png

萬事俱備京景,只欠旋轉!

6.png

不給代碼的教程都是在耍流氓骗奖!

 library(ggplot2) # 繪圖
 library(ggsci) # 配色
 ?
 # 構建測試數(shù)據(jù)
 dat = data.frame(x = rep('b',7),
  y = rep('a',7),
  z = rep('c',7),
  cat1 = paste('c',1:7, sep = '_'),
  cat2 = c('a1','a1','a2','a2','a3','a4','a4'),
  value1 = 1:7,
  value2 = 1:7)
 ?
 # 分別求所占百分比
 dat1 = aggregate(dat$value1, by = list(dat$cat1), FUN = sum)
 dat1$per1 = dat1$x / sum(dat1$x)
 ?
 # for循環(huán)構建標簽的相對位置
 for (i in seq(nrow(dat1), 1)) {
  if (i == nrow(dat1)) {
  dat1$per.y1[i] = dat1$per1[i] / 2
  }else{
  dat1$per.y1[i] = sum(dat1$per1[(i + 1):nrow(dat1)]) + dat1$per1[i] / 2
  }
 }
 ?
 # 構建標簽后合并數(shù)據(jù)
 dat1$label1 = paste(dat1$Group.1,'(',round(dat1$per1*100, 2),'%',')', sep = '')
 dat = merge(dat, dat1[,c(1,3,4,5)], by.x = 'cat1', by.y = 'Group.1')
 ?
 # 重復操作
 dat2 = aggregate(dat$value2, by = list(dat$cat2), FUN = sum)
 dat2$per2 = dat2$x / sum(dat2$x)
 ?
 for (i in seq(nrow(dat2), 1)) {
  if (i == nrow(dat2)) {
  dat2$per.y2[i] = dat2$per2[i] / 2
  }else{
  dat2$per.y2[i] = sum(dat2$per2[(i + 1):nrow(dat2)]) + dat2$per2[i] / 2
  }
 }
 ?
 dat2$label2 = paste(dat2$Group.1,'(',round(dat2$per2*100, 2),'%',')', sep = '')
 dat = merge(dat, dat2[,c(1,3,4,5)], by.x = 'cat2', by.y = 'Group.1')
 ?
 # 繪圖
 ggplot(dat) +
  # 繪制柱狀圖
  geom_bar(aes(y, 
  ifelse(cat2 == 'a3', per2, per2/2), 
  fill = cat2),
  stat = 'identity', width = 1.3) +
  # 添加標簽
  geom_text(aes(1.25, as.numeric(per.y2), 
  label = label2),
  size =2.5, color = 'black') +
  # 繪制柱狀圖
  geom_bar(aes(x, per1, fill = cat1), 
  stat = 'identity', width = .8, color = 'white') +
  # 添加標簽
  geom_text(aes(2, as.numeric(per.y1),label = label1),
  size = 2.5, color = 'black') +
  # 設置Y軸刻度
  scale_y_continuous(labels = scales::percent) +
  coord_polar(theta = "y") + # 轉換坐標軸
  theme_void() +
  scale_fill_igv() + # 設置填充色
  theme(legend.position = 'none') # 隱藏圖例
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末确徙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子执桌,更是在濱河造成了極大的恐慌鄙皇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仰挣,死亡現(xiàn)場離奇詭異伴逸,居然都是意外死亡,警方通過查閱死者的電腦和手機膘壶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門错蝴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颓芭,你說我怎么就攤上這事顷锰。” “怎么了畜伐?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵馍惹,是天一觀的道長。 經(jīng)常有香客問我玛界,道長万矾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任慎框,我火速辦了婚禮良狈,結果婚禮上,老公的妹妹穿的比我還像新娘笨枯。我一直安慰自己薪丁,他們只是感情好遇西,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著严嗜,像睡著了一般粱檀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漫玄,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天茄蚯,我揣著相機與錄音,去河邊找鬼睦优。 笑死渗常,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的汗盘。 我是一名探鬼主播皱碘,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼隐孽!你這毒婦竟也來了癌椿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤缓醋,失蹤者是張志新(化名)和其女友劉穎如失,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體送粱,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡褪贵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抗俄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脆丁。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖动雹,靈堂內(nèi)的尸體忽然破棺而出槽卫,到底是詐尸還是另有隱情,我是刑警寧澤胰蝠,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布歼培,位于F島的核電站,受9級特大地震影響茸塞,放射性物質(zhì)發(fā)生泄漏躲庄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一钾虐、第九天 我趴在偏房一處隱蔽的房頂上張望噪窘。 院中可真熱鬧,春花似錦效扫、人聲如沸倔监。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浩习。三九已至静暂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘦锹,已是汗流浹背籍嘹。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弯院,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓泪掀,卻偏偏與公主長得像听绳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子异赫,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354