作者: ls_本性
专题简介:本文章是关于R语言可视化的内容。从简单到复杂,将持续更
😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍
本文末尾有惊喜哦!
散点图
x1 = c(171,175,159,155,152,158,154,164,168,166,159,164) #身高
x2 = c(57,64,41,38,35,44,41,51,57,49,47,46) #体重
x3=c(rep('male',7),rep('female',5)) #性别
data=data.frame(x1,x2,x3)
plot(data$x1,data$x2,
type="p", #p是点,l是线,b既有点也有线, n得到一张空画布
main="height vs weight", #图上方的主题
ylab="weight(kg)", #y轴名称
xlab="height(cm)" , #x轴名称
ylim=c(30,70), #y轴范围
xlim=c(150,180), #x轴范围
col="blue", #颜色
pch=19 #点的形状
)
下面是pch参数为不同值时对应的形状
下图是体重和身高的散点图
折线图
若将type参数设定为type=“b”,就会出现折线图,结果如下图所示:
可以看出此图非常乱,我们可以对其排序进行改善
x1 = c(171,175,159,155,152,158,154,164,168,166,159,164) #身高
x2 = c(57,64,41,38,35,44,41,51,57,49,47,46) #体重
x3=c(rep('male',7),rep('female',5)) #性别
data=data.frame(x1,x2,x3)
index=order(x1) #对身高进行排序
data=data[index,] #对整个数据进行排序
plot(data$x1,data$x2,
type="b", #p是点,l是线,b既有点也有线
main="height vs weight", #图上方的主题
ylab="weight(kg)", #y轴名称
xlab="height(cm)" , #x轴名称
ylim=c(30,70), #y轴范围
xlim=c(150,180), #x轴范围
col="blue", #颜色
pch=19 #点的形状
)
排序后再画图便不会出现之前的线段折返情况,使图看起来比较有序、整洁。
加折线
法一:
x1 = c(171,175,159,155,152,158,154,164,168,166,159,164) #身高
x2 = c(57,64,41,38,35,44,41,51,57,49,47,46) #体重
x3=c(rep('male',7),rep('female',5)) #性别
data=data.frame(x1,x2,x3)
index=order(x1) #对身高进行排序
data=data[index,] #对整个数据进行排序
male=data[data$x3=='male',] #取出男性数据
female=data[data$x3=='female',] #取出女性数据
plot(male$x1,male$x2,
type="b", #p是点,l是线,b既有点也有线
main="height vs weight", #图上方的主题
ylab="weight(kg)", #y轴名称
xlab="height(cm)" , #x轴名称
ylim=c(30,70), #y轴范围
xlim=c(150,180), #x轴范围
col="blue", #颜色
pch=19 #点的形状
)
lines(female$height,female$weight,col='red',type='b')
法二:让type='n' #展现空画布
lines(female$height,female$weight,col='red',type='b')
lines(male$height,male$weight,col='red',type='b')
法三:通过ifelse让col 和 pch 在不同情况下对应不同值
color=ifelse(data$x3=='male','blue','red')
shape=ifelse(data$x2=='male',19,21)
plot(male$x1,male$x2,
type="b", #p是点,l是线,b既有点也有线
main="height vs weight", #图上方的主题
ylab="weight(kg)", #y轴名称
xlab="height(cm)" , #x轴名称
ylim=c(30,70), #y轴范围
xlim=c(150,180), #x轴范围
col=color, #颜色
pch=shape #点的形状
)
图像的完善
#加图标(可指定x,y位置放图标,也可大至指定访问)
legend(x=155,y=65,legend = c("male","female"),col=c('blue','red'),pch=c(4,21))
legend("top",legend = c("male","female"),col=c('blue','red'),pch=c(4,21))
#加文字
text(x=171,y=57,"xxx")
#加直线
abline(v=160,col='red',lty=3,lwd=3) #v加垂直线,lty线的类型,lwd线的宽度
abline(h=50,col='red',lty=4,lwd=7) #h加水平线,lty线的类型,lwd线的宽度
#线性拟合直线
result=lm(x2~x1,data) #result里面含有斜率和截距
abline(result,col='black')
lty和lwd参数表
柱形图
普通柱形图
### 柱形图
par(mar=c(10,10,10,10))
#par调用画图的各种参数,mar参数是用来控制图像四边的留白
barplot(data$height,
names.arg =rownames(data), #给每个矩形柱条下加名字
ylim = c(0,200),
xlab = 'name',
ylab='height',
las=2 ) #柱条下名字放置的方式,默认1水平放,2垂直放
par(mfrow=c(2,1)) #mfrow分割画布
barplot(data$height)
barplot(data$weight)
#每个柱形上面加长度
p=barplot(data$height) #返回每个柱形正中![间的X坐标
text(p,data$height,data$height,srt=45,col='red']
#将每个柱形下面的名字旋转
p=parplot(data$height)
text(p,0,
lables=rownames(data),
srt=30
adj=c(-2,2) #对文字进行上下左右微调
col='blue'
xpd=TRUE #一定要带这个参数,否者文字超出ylim范围,将不会显示
)
堆积柱形图
data1 <-as.matrix(t(data[,-3])) #堆积柱形图需要将数据转置,且需要为matrix类型,让每个人成为变量
barplot(data1,
col=c('red','blue'),
ylim=c(0,300)
)
legend('top',
horiz=T, #图标横着放
bty='n', #去掉方格
legend=c('height','weight'),
col = c('red','blue'),
pch=c(10,15),
)
并排柱形图
data1 <-as.matrix(t(data[,-3])) #堆积柱形图需要将数据转置,且需要为matrix类型,让每个人成为变量
barplot(data1,
beside='T' #使不同颜色的柱形并排
col=c('red','blue'),
ylim=c(0,300)
)
legend('top',
horiz=T, #图标横着放
bty='n', #去掉方格
legend=c('height','weight'),
col = c('red','blue'),
pch=c(10,15),
)
箱型图
name=c('aa','bb','cc','dd','ee','ff')
height= c(178,183,160,158,174,168) #身高
weight= c(70,75,50,48,68,52) #体重
gender=factor(c('m','m','f','f','m','f'),levels = c('m','f'),labels = c('male','female'))
data <- data.frame(height,weight,gender)
rownames(data) <- name
boxplot(height~gender,data = data,col=c('red','blue')) #第一个参数为formula(公式),需要因子变量
小提琴图
install.packages('plotrix')
library(plotrix)
violin_plot(unstack(data[,c('weight','gender')]),
col=c('red','green'))