准备工作
首先加载绘图过程中需要用到的包:
library(ggplot2)
library(splines)
library(dplyr)
library(tidyr)
接下来模拟一组数据用于绘图:
set.seed(2017)
data <- data.frame(
type=LETTERS[1:10],
Num =1:10,
X1 =runif(10),
X2 =runif(10),
X3 =runif(10),
stringsAsFactors=F
)
#显示数据集
data
## type Num X1 X2 X3
## 1 A 1 0.92424261 0.674331481 0.63411352
## 2 B 2 0.53717641 0.002020766 0.37986744
## 3 C 3 0.46919565 0.025093514 0.94207403
## 4 D 4 0.28862618 0.432077786 0.75499369
## 5 E 5 0.77008816 0.499391912 0.22761184
## 6 F 6 0.77276871 0.388681932 0.91466603
## 7 G 7 0.03932234 0.395375316 0.62044504
## 8 H 8 0.43490560 0.715707325 0.31910458
## 9 I 9 0.47216639 0.940999879 0.07628881
## 10 J 10 0.27383312 0.827229161 0.26083932
使用作图 ggplot2
时通常需要将数据集转换为长数据的形式,可使用以下代码进行相应的转换:
newData <- data %>% gather("var",value,-1:-2) %>%
bind_cols(data.frame(var_id=rep(1:3,each=10)))
#显示数据集
newData
## type Num var value var_id
## 1 A 1 X1 0.924242609 1
## 2 B 2 X1 0.537176413 1
## 3 C 3 X1 0.469195646 1
## 4 D 4 X1 0.288626176 1
## 5 E 5 X1 0.770088162 1
## 6 F 6 X1 0.772768713 1
## 7 G 7 X1 0.039322336 1
## 8 H 8 X1 0.434905600 1
## 9 I 9 X1 0.472166386 1
## 10 J 10 X1 0.273833123 1
## 11 A 1 X2 0.674331481 2
## 12 B 2 X2 0.002020766 2
## 13 C 3 X2 0.025093514 2
## 14 D 4 X2 0.432077786 2
## 15 E 5 X2 0.499391912 2
## 16 F 6 X2 0.388681932 2
## 17 G 7 X2 0.395375316 2
## 18 H 8 X2 0.715707325 2
## 19 I 9 X2 0.940999879 2
## 20 J 10 X2 0.827229161 2
## 21 A 1 X3 0.634113521 3
## 22 B 2 X3 0.379867441 3
## 23 C 3 X3 0.942074033 3
## 24 D 4 X3 0.754993688 3
## 25 E 5 X3 0.227611845 3
## 26 F 6 X3 0.914666027 3
## 27 G 7 X3 0.620445041 3
## 28 H 8 X3 0.319104576 3
## 29 I 9 X3 0.076288815 3
## 30 J 10 X3 0.260839318 3
柱状图
ggplot绘制柱状图的统计方法中默认计数,但是对于已经完成了相关统计工作的数据集来说,在绘制柱状图时必须要在图形参数中增加 stat="identity"
这一参数。
簇状柱状图
簇状柱状图需要在图形参数中设置 position="dodge"
使得不同变量的数据横向排列。
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",position="dodge",width=0.8)+
labs(title="Clustered Column Chart")
堆积柱状图
堆积柱状图需要设置的图形参数是 position="stack"
使得不同变量的数据纵向堆积。
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",position="stack",width=0.8)+
labs(title="Stacked Column Chart")
百分比堆积柱状图
百分比堆积柱状图需要设置的图形参数是 position="fill"
使得不同变量的数据转换为百分比后再纵向堆积。
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",position="fill",width=0.8)+
labs(title="Percentage Stacked Column Chart")
分面柱状图
在ggplot2中可使用 facet_grid()
函数绘制分面柱状图。
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",width=0.8)+
facet_grid(var~.)+
labs(title="Facet Grid Column Chart")
条形图
简单来说条形图就是柱形图横过来变换一下,在R中在绘制条形图时只需要添加 coord_flip()
函数即可。一般来说,柱状图适用于分类较少的情况,条形图适用于分类较多且名字较长的场景下。
簇状条形图
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",position="dodge",width=0.8)+
labs(title="Clustered Bar Chart")+
coord_flip()
堆积条形图
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",position="stack",width=0.8)+
labs(title="Stacked Bar Chart")+
coord_flip()
百分比堆积条形图
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",position="fill",width=0.8)+
labs(title="Percentage Stacked Bar Chart")+
coord_flip()
分面条形图
ggplot(newData,aes(type,value))+
geom_bar(aes(fill=var),stat = "identity",width=0.8)+
facet_grid(var~.)+
labs(title="Facet Grid Bar Chart")+
coord_flip()