R语言的一个优势就是在于其强大的制图功能,其中ggplot以强大的制图能力著称,ggplot制图系列我会一直慢慢的写下去,除此之外还会更新GraphPad Prism制图系列。今天来说下,ggplot制作条形图,条形图也叫柱形图,用于显示各项之间的比较情况,常见的有单数据条形图,多数据条形图,堆积条形图,百分比条形图。
今天我们使用SPSS自带的汽车销售数据来演示条形图制作,需要使用tidyverse包
我们先导入数据
library(foreign)
library(tidyverse)
bc <- read.spss("E:/r/test/tree_car.sav",
use.value.labels=F, to.data.frame=T)
我们来看下数据,car就是汽车售价,age是年龄,gender是性别,inccat是收入,这里分成4个等级,ed是教育程度,这里分为5个等级.我们处理一下数据,把分类变量转换成因子,然后加上一个标签。
bc$ed<-factor(bc$ed,levels=c(1:5),labels=c("小学","初中","高中","大学","博士"))
bc$inccat<-factor(bc$inccat,levels=c(1:4),labels=c("低收入","中低收入","中等收入","富裕"))
bc$gender<-ifelse(bc$gender=="m",1,0)
bc$gender<-factor(bc$gender,levels = c(0,1),labels=c("女性","男性"))
假设我们想知道不同教育水平买车在数据中的分布
ggplot(data = bc)+
geom_bar(mapping = aes(x=ed))
可以根据类别更改下颜色
ggplot(data = bc)+
geom_bar(mapping = aes(x=ed,fill=ed))###按类别填充颜色
假设我们想知道不同教育水平的人购车能力,我们先要求出不同教育水平的顾客平均购车价格
bc1<-group_by(bc,ed,gender)###进行分组
bc2<-summarise(bc1,price=mean(car,na.rm = T))###得出分组摘要
接下来就可以进一步进行比较,可以看出学历越高,买的车越贵
ggplot(data = bc2,aes(x=ed,y=price))+
geom_bar(mapping = aes(fill=ed),stat = "identity")###stat是必须的,identity表示位置不变
可以进一步美化一下
ggplot(data = bc2,aes(x=ed,y=price))+
geom_bar(mapping = aes(fill=ed),stat = "identity",
width = 0.8,size=0.25,alpha=0.7)###进行微调整宽度,透明度等
假如我们想进一步区分这些学历之中男女顾客买车有何不同
ggplot(data = bc2)+
geom_bar(mapping = aes(x=ed,y=price,fill=gender),stat = "identity",size=0.25,alpha=0.7)
也可以制作成多数据条形图表示
ggplot(data = bc2)+
geom_bar(mapping = aes(x=ed,y=price,fill=gender),position="dodge",
stat = "identity",size=0.25,alpha=0.7)###多数据条形图
假如我们想知道男女在各个教育水平买车价格的构成比,可以使用堆积条形图,我们先要求出各个类别的总和,再做图
bc3<-summarise(bc1,price1=sum(car,na.rm = T))
ggplot(data = bc3)+
geom_bar(mapping = aes(x=ed,y=price1,fill=gender),
stat = "identity",position ="stack",size=0.25,alpha=0.7,col="black")
我们也可以以百分比的形式表示,只要改变其中的position =“fill”
ggplot(data = bc3)+
geom_bar(mapping = aes(x=ed,y=price1,fill=gender),
stat = "identity",position ="fill",size=0.25,alpha=0.7,col="black")
也可以把X轴和Y轴对换
ggplot(data = bc3)+
geom_bar(mapping = aes(x=ed,y=price1,fill=gender),
stat = "identity",position ="stack",size=0.25,alpha=0.7,col="black")+
coord_flip()#####X和Y转换
更多精彩文章请关注公众号:零基础说科研