R的ggplot2包画柱状图?

By 陆勤 at 2019-02-26 • 0人收藏 • 170人看过

柱状图(Bar chart)是使用不同长度的柱子来显示数据分布的图形。


一 基本柱状图1

描述因子类型的单个变量的数据分析


# 加载R包
library(ggplot2)

# 数据集 使用R语言内置的mtcars数据集

# 基本柱状图
ggplot(mtcars, aes(x=as.factor(cyl) )) + 
  geom_bar()

图形结果:

1基本柱状图.png

二 基本柱状图2

描述一个离散变量和一个连续变量的关系时,采用柱状图需要指定参数: stat=”identity”

 

# 创建数据集
data <- data.frame(name=c("A","B","C","D","E") ,  value=c(3,12,5,18,45))
# 绘制柱状图
ggplot(data, aes(x=name, y=value)) + 
  geom_bar(stat = "identity")

图形结果:

2基本柱状图.png

三 修改柱状图中柱子的颜色

可以通过以下方法来装饰柱子的颜色,从而让柱子更有鲜明对比性

# 1: 统一的颜色。颜色是用于边框,填充是用于内部
ggplot(mtcars, aes(x=as.factor(cyl) )) +
  geom_bar(color="blue", fill=rgb(0.1,0.4,0.5,0.7) )

# 2: 使用色调
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl) )) + 
  geom_bar( ) +
  scale_fill_hue(c = 40)

# 3: 使用RColorBrewer
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl) )) + 
  geom_bar( ) +
  scale_fill_brewer(palette = "Set1")

# 4: 使用greyscale:
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl) )) + geom_bar( ) +
  scale_fill_grey(start = 0.25, end = 0.75)

# 5: 设置 manualy
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl) )) +  geom_bar( ) +
  scale_fill_manual(values = c("red", "green", "blue") )

第3种方法的图形结果:

3基本柱状图.png

四 删除图例和添加坐标轴名称

# 删除图例和添加坐标轴名称
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl) )) +
  geom_bar( ) + 
  theme(legend.position = "none") +
  labs(x = "My class", y = "Value")

图形结果:

4基本柱状图.png

五 柱状图水平摆放

# 柱状图水平摆放
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl) )) +
  geom_bar() + 
  coord_flip()

图形结果:

5基本柱状图.png


六 自定义柱子的宽度

# 自定义柱子的宽度
ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl))) +
  geom_bar(width=0.4)

图形结果:

6基本柱状图.png


七 分组柱状图


在基本柱状图的基础上,根据实际数据的情况,设计和实现分组柱状图,分组柱状图包括平铺和堆叠,而堆叠柱状图又可以分为堆叠数量或者堆叠百分比。

# 加载ggplot2包
library(ggplot2)

# 创建数据集
specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) )
condition <- rep(c("normal" , "stress" , "Nitrogen") , 4)
set.seed(360)
value <- abs(rnorm(12 , 0 , 15))
data <- data.frame(specie,condition,value)

# 1 分组柱状图
ggplot(data, aes(fill=condition, y=value, x=specie)) + 
  geom_bar(position="dodge", stat="identity")

# 2 堆叠柱状图
ggplot(data, aes(fill=condition, y=value, x=specie)) + 
  geom_bar( stat="identity")


# 3 堆叠柱状图百分比
ggplot(data, aes(fill=condition, y=value, x=specie)) + 
  geom_bar( stat="identity", position="fill")

分组柱状图结果:

1551216408717462.png

堆叠柱状图结果:

堆叠条形图1.png

堆叠柱状图百分比结果:

堆叠条形图2.png

八 使用分面替代分组柱状图


使用faceting可以很好地替代分组柱状图。

# 分面柱状图
ggplot(data, aes(y=value, x=specie, color=specie, fill=specie)) + 
  geom_bar( stat="identity") +    
  facet_wrap(~condition)


分面柱状图.png



登录后方可回帖

信息栏
数据人网是数据人学习、交流和分享的平台,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值
Loading...