R ggplot2繪制堆疊柱狀圖

STEP1:了解數(shù)據(jù)特征

rm(list = ls())
data_test = datasets::attitude
# 因?yàn)楹竺嫦胍霭俜直鹊亩询B柱狀圖,先查看這個(gè)數(shù)據(jù)適不適合
statistics = apply(data_test, 1, sum)   # 得到每個(gè)樣本的觀測(cè)值總和
plot(statistics)
data_test.png
plot(statistics).png
# 每個(gè)樣本的累加值不相等秀撇,不能直接用來(lái)做百分比柱狀圖划乖,需要轉(zhuǎn)換下
# 不過(guò)這段僅僅是為了作圖好看杀狡,已經(jīng)準(zhǔn)備好數(shù)據(jù)的可以不看下面的處理
data_percent = data.frame()   # 建立空數(shù)據(jù)框
for (n in 1:30) {
  data_percent = rbind( data_percent, data_test[n,] / statistics[n] )  
} 

# 再來(lái)看下肃廓,每個(gè)樣本總和都等于1,現(xiàn)在符合要求了
statistics = apply(data_percent, 1, sum)   
plot(statistics)
plot(statistics).png
# 再加上樣本的命名信息虚茶,方便看圖捅暴,已有命名的請(qǐng)忽略
data_percent$names = c(LETTERS[seq( from = 1, to = 15 )],
                       letters[seq( from = 1, to = 15 )])
data_percent.png

STEP2:整理數(shù)據(jù)(變成長(zhǎng)數(shù)據(jù))

#作圖前有個(gè)很重要的前置動(dòng)作,要把寬矩陣轉(zhuǎn)換為長(zhǎng)矩陣
#(具體名詞解釋可以百度,關(guān)鍵原因是計(jì)算機(jī)和人的識(shí)別習(xí)性是不同的)
library(reshape2)
data_plot = melt(data_percent)
colnames(data_plot) = c('name','attitude','percent')
group = c( rep('Upper',15), rep('Lower',15))
data_plot$group = rep(group,7)
data_plot.png

STEP3:畫圖

STEP3.1:基本圖形
library(ggplot2)
p = ggplot( data_plot, aes( x = name, weight = percent, fill = attitude))+
  geom_bar( position = "stack");p
stack.png
# 如果把 "stack" 改成 "dodge"官研,可以變成分組柱狀圖
p = ggplot( data_plot, aes( x = name, weight = percent, fill = attitude))+
  geom_bar( position = "dodge");p
dodge.png

參數(shù)含義.png
STEP3.2:改顏色
#改顏色
library(ggsci)
p +  scale_fill_nejm()
scale_fill_nejm.png
p +  scale_fill_manual( values = rainbow(7))
rainbow(7).png
# 還可以自定義
p +  scale_fill_manual( values = c('yellow','green','red','blue','brown','black','blue'))
自定義.png
STEP3.3:改標(biāo)簽
# 順帶秽澳,可以把標(biāo)簽給改了
p + xlab('people') + ylab('percent') + scale_fill_nejm()
標(biāo)簽.png
STEP3.4:數(shù)值排序
#排序的問(wèn)題,
#如果我想調(diào)整不同類型柱子的順序戏羽,讓他們按大小排序担神,可以用factor 函數(shù)
order_x =  apply( data_percent[,1:7], 2, sum)   # 查看各種 attitude 的總和
order_x = order_x[order(order_x, decreasing = T)]  # decreasing = T 代表是倒序
order_x  # 看一下,是從大到小排著的

# 此時(shí) data_plot數(shù)據(jù)框里面的 attitude 就按照給定的 levels 排序了 
data_plot$attitude = factor(data_plot$attitude,
                          levels = names(order_x) ,  
                          ordered = T )

p2 = ggplot( data_plot,aes(x = name, weight = percent, fill = attitude))+
 geom_bar(position = "stack")  
p2
大小排序.png
STEP3.5:樣本排序
# 還可以給樣本排序始花,同樣的道理
names = c(LETTERS[seq( from = 1, to = 15 )],
          letters[seq( from = 1, to = 15 )])#擬定的樣本順序

data_plot$name = factor(data_plot$name,
                       levels = names ,     
                       ordered = T )
p3 = ggplot(data_plot,aes(x = name, weight = percent, fill = attitude))+
  geom_bar(position = "stack")  
p3
樣本排序.png
STEP3.6:分組展示
# 可以考慮分組展示
p3 + facet_wrap(~group, scales = 'free', nrow = 2)
分組展示.png
STEP3.7:用箱圖查看整體分布情況
# 可以查看各種attitude的整體情況
ggplot(data_plot, aes(x = attitude, y = percent,
                      fill = attitude))+
geom_boxplot()
整體分布情況.png
STEP3.8:線圖
# 另外還可以做成線圖妄讯,不過(guò)這個(gè)數(shù)據(jù)做出來(lái)不好看
ggplot(data_plot, aes(x =name, y = percent,
                      group =attitude,  color = attitude))+
  geom_line()+
  scale_color_nejm()
線圖.png
STEP3.8:在堆疊圖上標(biāo)數(shù)字(大概就是這個(gè)意思,圖太丑了)
p = ggplot( data_plot, aes( x = name, weight = percent, fill = attitude))+
  geom_bar( position = "stack")+
  geom_text(aes(label = percent,y=percent), 
            position = position_stack(vjust = 0.5), size = 1.5);p
標(biāo)數(shù)字.png

整理自
https://cloud.tencent.com/developer/article/1819219
https://www.javaroad.cn/questions/124111
https://cloud.tencent.com/developer/ask/109270
http://www.reibang.com/p/ac615ba65ab6

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酷宵,一起剝皮案震驚了整個(gè)濱河市亥贸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浇垦,老刑警劉巖炕置,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異溜族,居然都是意外死亡讹俊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門煌抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仍劈,“玉大人,你說(shuō)我怎么就攤上這事寡壮》犯恚” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵况既,是天一觀的道長(zhǎng)这溅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)棒仍,這世上最難降的妖魔是什么悲靴? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮莫其,結(jié)果婚禮上癞尚,老公的妹妹穿的比我還像新娘。我一直安慰自己乱陡,他們只是感情好浇揩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著憨颠,像睡著了一般胳徽。 火紅的嫁衣襯著肌膚如雪积锅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天养盗,我揣著相機(jī)與錄音缚陷,去河邊找鬼。 笑死往核,一個(gè)胖子當(dāng)著我的面吹牛蹬跃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铆铆,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蝶缀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了薄货?” 一聲冷哼從身側(cè)響起翁都,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谅猾,沒(méi)想到半個(gè)月后柄慰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡税娜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年坐搔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敬矩。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡概行,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弧岳,到底是詐尸還是另有隱情凳忙,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布禽炬,位于F島的核電站涧卵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腹尖。R本人自食惡果不足惜柳恐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望热幔。 院中可真熱鬧乐设,春花似錦、人聲如沸断凶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)认烁。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間却嗡,已是汗流浹背舶沛。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窗价,地道東北人如庭。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像撼港,于是被迫代替她去往敵國(guó)和親坪它。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容