R中的柱形图

注,有任何建议或疑问,请加 QQ: 1595218767 ,共同探讨学习
如R/python代码编程作图等方面需要帮忙,欢迎来店咨询 之恒科技, 挥动热情的小爪爪期待你哦

在日常作图中,柱形图就像白开水,没有特异之处,却处处责任担当
今天我们就尝试通过R来展示各种柱形图

数据准备

> xs <- c(17.0,4.6,22,10.2,19.6)
> qw <- c(37.2,33,6,14.8,19.8)
> jk <- c(24.2,28,7,39.2,5.4)
> nf <- letters[1:5]
> (dt1 <- data.table::data.table(nf,xs,qw,jk))
   nf   xs   qw   jk
1:  a 17.0 37.2 24.2
2:  b  4.6 33.0 28.0
3:  c 22.0  6.0  7.0
4:  d 10.2 14.8 39.2
5:  e 19.6 19.8  5.4
> library(reshape2)
> (dt2 <- melt(dt1,id.vars=c('nf')))
   nf variable value
1   a       xs  17.0
2   b       xs   4.6
3   c       xs  22.0
4   d       xs  10.2
......

簇状柱形图1

> library(ggplot2)
> ggplot(dt2,aes(x=nf,y=value,fill=variable))+
  geom_bar(stat='identity',position='dodge',alpha=.5)+
  geom_text(aes(x=rep(1:5,3)+rep(c(-0.3,0,0.3),each=5),
                y=value+2,label=value),size=3,col='darkgray')+
  labs(title='Bar with Dodge',x='',y='')+
  theme(legend.position = 'top',
        legend.justification = 'right',
        legend.key.height = unit(0.1,'cm'),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.y = element_blank(),
        panel.background = element_blank())+
  scale_fill_grey(start = 0,end=0.6)
bar_dg

簇状柱形图2

wuzhong1 <- rep(c('indx1','indx2'),3)
puxi1 <- rep(c('NRI','NTI','PD'),each=2)
value1 <- c(0.00021,0.00060,-0.00054,-0.00190,0.00041,0.00150)
df1 <- data.frame(wuzhong1,puxi1,value1)

library(ggplot2)
ggplot(df1,aes(puxi1,value1,fill=wuzhong1))+
  geom_bar(stat = 'identity',position = 'dodge')+
  labs(title='谱系多样性指数',y='',x='')+
  geom_text(aes(x=seq(0.7,by=0.5,length.out = 6),
    y=ifelse(value1>0,value1+0.0003,value1-0.0003),
                label=value1),size=3,col='darkgray')+
  theme(legend.position = 'top',
        legend.justification = 'left',
        legend.key.height = unit(0.1,'cm'),
        panel.background = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.x = element_blank())+
  scale_fill_manual(values = c('black','darkgray'))
bar_dg2

堆积柱形图

library(data.table)
xs <- c(17.0,4.6,22,10.2,19.6)
qw <- c(37.2,33,6,14.8,19.8)
jk <- c(24.2,28,7,39.2,5.4)
nf <- letters[1:5]
(dt1 <- data.table(nf,xs,qw,jk))
(dt2 <- melt(dt1,id.vars=c('nf')))
dt2 <- dt2[order(nf,-variable)]
dt2[,dui_y:=cumsum(value)-value/2,by=.(nf)]
dt2

library(ggplot2)
ggplot(dt2,aes(x=nf,y=value,fill=variable))+ 
  geom_bar(stat='identity',position='stack',alpha=.5)+ 
  geom_text(aes(y=dui_y,label=value),size=3,col='white')+
  labs(title='Bar with Stack',x='',y='')+ 
  theme(legend.justification = 'right', 
        legend.position = 'top', 
        legend.key.height = unit(0.1,'cm'),
        panel.background = element_blank(),
        axis.ticks = element_blank(),
        axis.text.y = element_blank())+ 
  scale_fill_grey(start = 0.6,end=0) 
bar_st

百分比堆积柱形图

dt2[,per1:=cumsum(value/sum(value))-(value/sum(value))/2,by=nf]
ggplot(dt2,aes(x=nf,y=value,fill=variable))+
  geom_bar(stat='identity',position='fill',alpha=.5)+
  geom_text(aes(y=per1,label=variable),col='white',size=3)+
  labs(title='Bar with Fill',x='',y='')+
  theme(legend.position = 'none',
        panel.background = element_blank(),
        axis.ticks = element_blank(),
        axis.text.y = element_blank())+
  scale_fill_grey(start=0.6,end=0)
bar_fil

分面柱形图 - 纵向

> ggplot(dt2,aes(x=nf,y=value,fill=nf))+
  geom_bar(stat='identity',position='stack',alpha=.5)+
  geom_text(aes(x=nf,y=value/2,label=value),col='white',size=3)+
  labs(title='Bar with Stack in facets',x='',y='')+
  theme(panel.background = element_blank(),
        legend.position = 'none',
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank())+
  scale_fill_grey(start=0.6,end=0)+
  facet_grid(variable~.)
bar_fct

分面柱形图 - 横向

事实上,人眼球的左右移动能力优于上下移动能力,导致人类视觉的横向阅读速度和接受能力优于纵向,so 我们来做个横向展示

ggplot(dt2,aes(x=nf,y=value,fill=nf))+
  geom_bar(stat='identity',position='stack',alpha=.5)+
  labs(title='Bar with Stack in facets',x='',y='')+
  geom_text(aes(x=nf,y=value*0.5,label=value),size=3,col='white')+
  theme(legend.position = 'none',
        #legend.justification = 'left',
        legend.key.height = unit(0.1,'cm'),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.x = element_blank(),
        panel.background = element_blank()
        )+
  scale_fill_grey(start = 0,end=0.5)+
  facet_grid(.~variable)+
  coord_flip()
bar_fct3.png

简单柱形图的横纵向比较

library(vcd)
(df1 <- data.frame(table(Arthritis$Improved)))
    Var1 Freq
1   None   42
2   Some   14
3 Marked   28
ggplot(df1,aes(x=reorder(Var1,Freq),y=Freq,fill=reorder(Var1,Freq)))+
     geom_bar(stat = 'identity')+
     geom_text(aes(y=Freq+2,label=Freq),
                             col='black',size=4)+
     labs(title='Barplot1',x='',y='')+
     theme(panel.background = element_blank(),
           legend.position = 'none',
           axis.ticks.y = element_blank(),
           axis.text.y = element_blank())+
  scale_fill_grey(start=0.6,end=0)
sim_bar1
ggplot(df1,aes(x=reorder(Var1,Freq),y=Freq))+
  geom_bar(stat = 'identity')+
  geom_text(aes(y=Freq*3/4,label=Freq),
            col='white',size=4)+
  labs(title='Vertical Barplot',x='',y='')+
  theme(panel.background = element_blank(),
        legend.position = 'none',
        axis.ticks.x = element_blank(),
        axis.text.x = element_blank())+
  coord_flip()
sim_bar2

简单柱形图的 x坐标轴标签顺序修改

value1 <- c(-0.6034,-2.5413,0.2555)
id1 <- c('<=-0.1042','<=-0.9138','>-0.1042')
df1 <- data.frame(id1,value1)
        id1  value1
1 <=-0.1042 -0.6034
2 <=-0.9138 -2.5413
3  >-0.1042  0.2555

ggplot(df1)+
  geom_bar(aes(id1,value1,fill=id1),stat = 'identity')+
  geom_text(aes(id1,ifelse(value1>0,value1+0.1,value1-0.1),
                label=value1),size=3,col='#595959')+
  geom_hline(yintercept = 0,col='#595959')+
  labs(title='跨省',x='',y='')+
  scale_fill_grey(start = 0.6,end=0)+
  theme(panel.background = element_blank(),
        legend.position = 'none',
        axis.ticks.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.text.y = element_blank())
scl_limit1.png
ggplot(df1)+
  geom_bar(aes(id1,value1,fill=id1),stat = 'identity')+
  geom_text(aes(id1,value1/2,
                label=value1),size=3,col='#595959')+
  geom_hline(yintercept = 0,col='#595959')+
  labs(title='跨省',x='',y='')+
  scale_x_discrete(limits=c('<=-0.9138','<=-0.1042','>-0.1042'))+
  scale_fill_grey(start = 0.6,end=0)+
  theme(panel.background = element_blank(),
        legend.position = 'none',
        axis.ticks.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.text.y = element_blank())
scl_limit2.png

x,y轴标签值修改

value1 <- c(-0.6034,-2.5413,0.2555)
id2 <- factor(c(1,2,3))
df1 <- data.frame(value1,id2)
str(df1)
'data.frame':   3 obs. of  2 variables:
 $ value1: num  -0.603 -2.541 0.256
 $ id2   : Factor w/ 3 levels "1","2","3": 1 2 3

library(ggplot2)
ggplot(df1)+
  geom_bar(aes(id2,value1),stat = 'identity')
labl1.png
ggplot(df1)+
  geom_bar(aes(id2,value1,fill=id2),stat = 'identity')+
  geom_text(aes(id2,value1/2,
                label=value1),size=3,col='white')+
  geom_hline(yintercept = 0,col='#595959')+
  labs(title='跨省',x='',y='')+
  scale_x_discrete(limits = c(2,1,3),
                   labels=c('<=-0.1042','<=-0.9138','>-0.1042'))+
  scale_fill_grey(start = 0.6,end=0)+
  theme(panel.background = element_blank(),
        legend.position = 'none',
        axis.ticks.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.text.y = element_blank())
labl2.png

Reference:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容