R语言绘图命令(含ggplot2)

发布时间 2023-06-27 22:54:01作者: 灯新

#绘图:初级绘图、中级绘图、ggplot2高级绘图
#笔记包含内容:
#《R语言实战》:第6章基本图形、第11章中级绘图、第19章ggplot高级绘图
#===================================================================================

一、第6章基本方法之基本图形

#plot绘制####
plot(mtcars$mpg) #默认散点图
plot(mtcars$mpg,mtcars$wt) #默认散点图
#更多直接看帮助..

1.简单条形图 

library('vcd')
str(Arthritis)
counts<-table(Arthritis$Improved)
barplot(counts,main='sample'
,horiz = T #生成水平条形图
,xlab='improvement',ylab='frequency')
#生成因素变量的条形图(案例中arthritis$improved是一个因子
#绘制的类别变量是一个因子或有序型因子,可使用plot函数
plot(Arthritis$Improved,main='sample',horiz = F,
xlab='improvement',ylab='frequency')

---------------------------------------------------------------

2 堆砌条形图和分组条形图

#简单条形图:
count<-table(Arthritis$Improved,Arthritis$Treatment)
barplot(count,main="sample",
xlab='improvement',ylab='frequency',
ylim=c(0,40),
col=c('#BBFFFF','#AEEEEE','#96CDCD'),
legend=rownames(count), #显示图例
beside=T #T为分组条形图
)
#2.1 ggplot绘制上面分组条形图
ggplot(Arthritis,aes(x=Treatment,fill=Improved))+
geom_bar(position = 'dodge')

#复杂一点(调整图例位置)
opar<-par(no.readonly=T)
par(mar=c(5,5,4,2)) #自定义图形边界,默认c(5,4,4,2)
par(las=2) #定义标签垂直于坐标轴
par(cex.axis=0.75) #定义坐标轴文字缩放倍数
count<-table(Arthritis$Improved)
barplot(count,
main="sample", #图形标题
horiz=T, #生成水平条形图
cex.names = 0.8, #调整条形标签缩放倍数
legend=rownames(count),#图例标签1(此处任选一种表达)
#legend=c("No","some","Marked"), #图例标签2
names.arg = c("no","some","marked"), #设置条形标签(无则默认生成)
xlim=c(0,50),
col=c('#BBFFFF','#AEEEEE','#96CDCD'),
args.legend=c(25,28,
x.intersp = 0.9, #设置图例盒子空间大小
y.intersp = 0.7,#设置图例盒子空间大小
text.width=5, #图例框大小
cex=0.9) #图例放大倍数,默认1
)
par(opar)
-----------------------------------------------------------------------

3 均值条形图

states<-data.frame(state.region,state.x77) #R自带的数据包
means<-aggregate(states$Illiteracy,
by=list(states$state.region),
FUN=mean)
means<-means[order(means$x),] #均值从小到大排序
barplot(means$x,main="Mean",
names.arg =means$Group.1,
col=c('#BBFFFF','#AEEEEE','#96CDCD','#668B8B'),
ylim=c(0,2))
lines(means$x,type = "b",pch=17,lty=2,col="red") #添加线条
#lines(x,y),相当于plot(x,y,type="1")?
------------------------------------------------------------------------

4 棘状图

count<-table(Arthritis$Treatment,Arthritis$Improved)
spine(count,main='sample') #比堆砌图好用

------------------------------------------------------------------------

5 饼图

#pie(x,labels=) 最好带上labels=,labels表示各扇形标签
opar<-par(no.readonly=T)
par(mfrow=c(2,2)) #2x2个图形
slices<-c(10,12,4,16,8)#表示每一个扇形面积
lbls<-c("US","UK","Australia","Germany","France")
pie(slices,labels=lbls,main = "pie1")
pct<-round(slices/sum(slices)*100,1) #将数值转换为百分比
lbls2<-paste(lbls,pct,'%',seq="")
pie(pct,labels=lbls2,main='pie2',
col=rainbow(length(lbls2)) #生成彩虹色
)
library(plotrix)
pie3D(slices,labels=lbls, #3D饼图要labels= 不然会报错
height=0.1,explode = 0.1,main='pie3')
mytable<-table(state.region)
lbls3<-paste(names(mytable),'\n',mytable,sep='')
pie(mytable,labels = lbls3,main='pie4')
par(opar)

--------------------------------------------------------------------------

6 扇形图

slices<-c(10,12,4,16,8)
lbls<-c("US","UK","Australia","Germany","France")
fan.plot(slices,
labels = lbls,
main = '扇形图',
col=terrain.colors(length(lbls))) #创建连续型颜色向量

--------------------------------------------------------------------------

7 直方图

par(mfrow=c(2,2))
attach(mtcars)
hist(mpg) #简单直方图,默认图形
hist(mpg
,breaks = 12 #控制组的数量
,xlab='X',main='pc2')
hist(mpg
,breaks = 12
,xlab='X',main='pc3'
,freq = F #根据概率密度而不是频数绘制
)
rug(jitter(mpg)) #添加轴须图p119(标出元素出现的频数)
lines(density(mpg) #密度函数(绘制核密度图叠加到图形上方)
,col='blue',lwd=2)

##绘制带有正态曲线和盒型的直方图
x<-mpg
h<-hist(x
,breaks = 12
,xlab='X',main='pc4')
xfit<-seq(min(x),max(x),length=40) #生成等差序列
yfit<-dnorm(xfit,mean = mean(x),sd=sd(x))
yfit<-yfit*diff(h$mids[1:2])*length(x) #?什么意思
lines(xfit,yfit,col="blue",lwd=2)
box() #生成围绕图形的盒子
detach(mtcars)

------------------------------------------------------------------------

8 核密度图

par(mfrow=c(2,1))
plot(density(mtcars$mpg))
polygon(density(mtcars$mpg),
col='grey', #填充色填充曲线下方区域
border='blue') #曲线颜色
rug(mtcars$mpg,col='brown') #添加须轴图
#可比较(分组)的核密度图
#library('sm')
attach(mtcars)
#创建分组因子
cyl.f<-factor(cyl,levels = c(4,6,8),
labels = c("4 cylinder","6 cylinder","8 cylinder"))
#为了向图形提供值的标签,将cyl 转换为名为 cyl.f 的因子
sm.density.compare(mpg,cyl,xlab="Miles Per Gallon")#绘制密度图
title(main = "MPG Distribution by Car Cylinders")#添加标题
colfill<-c(2:(1+length(levels(cyl.f))))#创建一个颜色向量
legend(locator(1),levels(cyl.f),fill=colfill)
detach(mtcars)

---------------------------------------------------------------------------

9 箱线图

boxplot(mtcars$mpg)
boxplot.stats(mtcars$mpg) #输出用于构建图形的统计量
#并列箱线图进行跨组比较(单个分组变量)
#boxplot(formula,data=dataframe) #formula是一个公式,y~A*B表示因变量~自变量

boxplot(mpg~cyl,data=mtcars,xlab='mpg',ylab='cyl',main='pic')
#含凹槽的箱线图(单个分组变量)
boxplot(mpg~cyl,data=mtcars,
notch=T, #得到含凹槽的箱线图
varwidth=T,#使箱线图的宽度与其样本大小的平方根成正比
col='orange'
)
#并列箱线图进行跨组比较(多个分组变量)
cyl.f<-factor(mtcars$cyl,levels = c(4,6,8),
labels = c('4','6','8'))
am.f<-factor(mtcars$am,levels = c(0,1),
labels = c('anto','standard'))
boxplot(mpg~cyl.f*am.f,
data=mtcars,
col=c('gold','darkgreen'),
varwidth=T)

---------------------------------------------------------------------------------

10 小提琴图

#小提琴图是箱线图与核密度图的结合
#小提琴图要求将要绘制的不同组分离到不同变量中P126
library('vioplot')
x1<-mtcars$mpg[mtcars$cyl==4]
x2<-mtcars$mpg[mtcars$cyl==6]
x3<-mtcars$mpg[mtcars$cyl==8]
vioplot(x1,x2,x3,
names = c("4 cyl","6 cyl","8 cyl"),
col = "gold")

------------------------------------------------------------------------------------

11 散点图

#11.1 使用plot基础函数 p239
plot(x,y) #默认散点图
plot(x) #默认散点图

attach(mtcars)
plot(x=wt,y=mpg,
main='titile',
xlab = 'x',
ylab = 'b',pch=19)
abline(lm(mpg~wt),col='red',lwd=2,lty=1) #添加最佳拟合的线性直线

#11.2 使用dotchart函数
dotchart(x,labels=)

dotchart(mtcars$mpg,labels = row.names(mtcars),
cex = 0.7) #控制标签大小
#分组、排序、着色后的点图
x<-mtcars[order(mtcars$mpg),] #根据mpg对数据库mtcars升序排序,结果保存为数据框x
x$cyl<-factor(x$cyl)
x$color[x$cyl==4]<-"red"
x$color[x$cyl==6]<-"blue"
x$color[x$cyl==8]<-"darkgreen"
dotchart(x$mpg,labels = row.names(x),
cex = 0.7,
groups = x$cyl, #选定一个因子,指定x中的分组方式(此处x为x$mpg)
gcolor='orange',#控制不同组标签的颜色
color=x$color,
pch=19)

-----------------------------------------------------------------------------------------------------------------------------------------------------------

二、第11章 中级绘图

1 散点图

#1.1 高密度散点图
#smoothScatter函数利用核密度估计生成颜色密度表示点分布
with(mtcars,smoothScatter(x=wt,y=mpg,main='title')) #p243

#1.2 三维散点图 scatterplot3d包
#针对3个定量变量
library("scatterplot3d", lib.loc="D:/R/R-3.6.0/library")
attach(mtcars)
scatterplot3d(x=wt,y=disp,z=mpg,
pch=16,highlight.3d = T,
type='h')
detach(mtcars)

#1.2.1 三维散点图添加回归面 p245
attach(mtcars)
s3d<-scatterplot3d(wt,disp,mpg,
pch=16,highlight.3d = T,
type='h')
fit<-lm(mpg~wt+disp)
s3d$plane3d(fit) #?
detach(mtcars)

2 气泡图

#2.1 p249
attach(mtcars)
r<-sqrt(disp/pi)
symbols(wt,mpg,circles = r,inches = 0.3,fg='white',bg='lightblue')
text(wt,mpg,row.names(mtcars),cex=0.6) #添加标签名称
detach(mtcars)

-------------------------------------------

3 折线图

#View(Orange)
opar<-par(no.readonly = T)
par(mfrow=c(1,2))
t1<-subset(Orange,Tree==1)
plot(t1$age,t1$circumference)
plot(t1$age,t1$circumference,type='b')
par(opar)


--------------------------------------------

4 相关系数图

#检验定量变量的相关关系
#corrgram()包绘相关图 解读p255
library("corrgram", lib.loc="D:/R/R-3.6.0/library")
corrgram(mtcars,
order=T,#建议选T,表示相关矩阵使用主成分分析法对变量重排序
#lower.panel=panel.shade, #设定主对角线下方的元素样式
upper.panel=panel.pie, #设定主对角线上方的元素样式
text.panel=panel.txt)

#4.2 上三角区域留白并控制阴影颜色
colors<-colorRampPalette(c('lightgreen','blue'))
corrgram(mtcars,order=T,
upper.panel=NULL, #设置上三角留白
col.regions = colors,
text.panel=panel.txt)
--------------------------------------------------------

5 马赛克图

#看不懂。。。
#展示2个或者多个类别变量的关系 p259
#按船舱等级、乘客性别、年龄层绘制titanic幸存者的马赛克图
#library("vcd", lib.loc="D:/R/R-3.6.0/library")
mosaic(Titanic,shade = T,legend=T)

#=====================================================================================

三、第19章ggplot2高级绘图

图形定义介绍

#1、条形图(bar):反映分类数据的频数分布;
#2、直方图(histogram):用直方形的组距为底长和频数为高度表示次数分布的图形
#比如按年龄分组统计人数
#3、饼图(pie):反映各组占总体的比例,适合研究结构性问题
#4、折线图(line):显示随时间变化或者有序类别而变化的连续数据
#5、散点图(scatter):显示两个连续变量(X和Y轴)之间的关系

#=======================================================================================
#分别映射一个离散型变量和连续型变量到x和y

1 箱线图

library('lattice')
library('ggplot2')
#1.1 箱线图
data(singer,package='lattice')
ggplot(singer,aes(x=voice.part,y=height))+
geom_boxplot(fill='orange')


#1.2 箱形图设置异常点及图形调色(outlier.x参数控制异常点)
ggplot(singer,aes(x=voice.part,y=height)) +
geom_boxplot(fill = "white",
color = "darkgreen",
outlier.color = "red", #控制边线颜色
outlier.fill = "orange",
outlier.size = 3, #默认2
outlier.shape=21 #默认19,即实心圆,黑色填充
)

#1.3并列箱线图
ggplot(mpg, aes(x=class, y=hwy)) +
geom_boxplot(aes(color = drv), fill="white")

#1.4 绘制缺口箱线图,并添加均值标记(stat_summary)
#箱线图中的槽口用来帮助查看不同分布的中位数是否有差异
#如果各箱线图的槽口互不重合,说明各中位数有差异
#对于正态分布的数据,中位数与均值比较接近;对于偏态数据会有较大差异
library(MASS)
ggplot(birthwt,aes(x=smoke,y=bwt))+
geom_boxplot(fill='orange',color='black',notch =T )+
geom_point(position = 'jitter',color='blue',alpha=0.5)+
geom_rug(color='orange') + #添加地毯图
stat_summary(fun.y = 'mean',geom = 'point',shape=23,size=3,
fill='red') #向箱线图添加均值标记

#1.5绘制单组数据箱线图
#必须给定x参数映射任意一个值
ggplot(birthwt,aes(x=1,y=bwt))+
geom_boxplot()+
scale_x_continuous(breaks = NULL)+ #移除x轴的刻度标记
theme(axis.title.x = element_blank()) #移除x轴标签


------------------------------------------------------------

2 散点图

# 散点图通常用来刻画两个连续型变量之间的关系

#2.1散点图加趋势线
#help(geom_smooth)
ggplot(mtcars,aes(x=wt,y=mpg))+
geom_point(pch=17,color='blue',size=2)+
geom_smooth(method = 'lm',color='red',linetype=2)+
labs(title='Automobile Data',x='Weight',y='Miles per gallon')

#2.2 散点图并按性别分组,并拟合二次多项式
#分组变量必须是分类变量,换言之必须是因子或者字符串型的向量
#如果分组变量以数值型向量进行存储,则需要将其转换成因子型变量才能作为分组变量
library(car)
#str(Salaries)
#可以将一个分组变量同时映射给shape和color属性
#若添加趋势线可以将该变量映射给linetype
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,
linetype=sex,shape=sex,color=sex))+
geom_point()+
geom_smooth(method=lm,formula=y~poly(x,2))

#2.3 以性别和学术等级分组,绘制获得博士学位年数与薪水的关系p412
#如果是多个分组变量,可以分别映射给shape和color属性
#学术等级用不同颜色表示,性别用不同形状表示
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,
color=rank,shape=sex))+
geom_point(position = "jitter")

#2.4 散点图自定义每个因子水平颜色scale_color_manual()
#使用变量映射,就可以调用相应的函数进行该映射的修改
#如color可以调用scale_color_manual()或者scale_color_brewer()
#使用shape可以调用scale_shape_manual(),同理fill映射等
help(scale_fill_manual)
library(car)
ggplot(Salaries,aes(x=yrs.since.phd,
y=salary,
color=rank))+
scale_color_manual(values = c('lightblue','olivedrab','navy'))+
geom_point()

#2.5 增加一个用来标识儿童体重是否超过100磅的分组列 fill
library(gcookbook)
# 将weightLb列的数据按照是否大于100磅分为两组 cut函数
hw <- heightweight
hw$weightGroup <- cut(hw$weightLb,
breaks = c(-Inf,100,Inf),
labels = c("< 100",">=100"))
ggplot(hw,aes(x=ageYear,
y=heightIn,
shape=sex,
fill=weightGroup))+
geom_point(size=2.5)+
scale_shape_manual(values = c(21,24))+
scale_fill_manual(values = c(NA,"orange"),
guide=guide_legend(override.aes = list(shape=21))) #指定图例键的美学参数的列表
#help(scale_fill_manual)

#2.6 散点图中创建渐变色系 (必须是将连续性变量映射给fill)
#测试中shape=21~25号形状可填充渐变色,其他形状均会是黑色
#总结使用渐变色一定要对形状shape做限制(21~25号)
#2.6.1 离散数据不分组
ggplot(heightweight,aes(x=ageYear,y=heightIn,fill=weightLb))+
geom_point(size=2.5,shape=21)+
scale_fill_gradient(low = 'white',high = 'purple')

#把一个连续型变量映射给某个属性后,并不妨碍同时将分类变量映射给其他属性
ggplot(heightweight,aes(x=ageYear,
y=heightIn,
shape=sex,
fill=weightLb))+
geom_point()+
scale_fill_gradient(low = 'white',high = 'purple')+
scale_shape_manual(values = c(21,22))

#2.6.2 离散数据分组
#使用guide = guide_legend()函数以分组代替
hw <- heightweight
ggplot(hw,aes(x=ageYear,y=heightIn,fill=weightLb))+
geom_point(size=2.5,shape=21)+
scale_fill_gradient(low = 'white',high = 'purple',
breaks=seq(70,170,by=20),
limits=c(0,200),
guide = guide_legend())
#help("scale_fill_gradient")

#2.7在不同x上计算y值:stat = "summary"
#例:既可以显示原始数据又可以展示均值
ggplot(mpg,aes(trans,cty))+
geom_point()+
geom_point(stat = "summary",fun.y="mean",colour="red",size=4)

 

#2.8 使用ggplot2的qplot函数绘制
#还是喜欢直接用户ggplot绘制
library("ggplot2", lib.loc="D:/R/R-3.6.0/library")
#help(qplot)
qplot(mtcars$wt,mtcars$mpg)
#如果绘图使用的两个参数向量包含在同一个数据框内,则可以改成
qplot(wt,mpg,data=mtcars)
#与下面等价
ggplot(mtcars,aes(x=wt,y=mpg))+geom_point()


--------------------------------------------------------------------

3 直方图

#data(singer,package='lattice')
#3.1默认将数据切分为30组,直方图填充色是黑色且没有边框线(很丑)
ggplot(faithful,aes(x=waiting))+
geom_histogram()
#很多时候直方图非常依赖组距及组边界
#3.1.1修改默认分组数目
#数据分组时各分组区间左闭右开
#1指定组距
ggplot(faithful,aes(x=waiting))+
geom_histogram(binwidth = 5)
#2 将数据切分为指定的分组数目
zone<-diff(range(faithful$waiting))/15
ggplot(faithful,aes(x=waiting))+
geom_histogram(binwidth =zone,
fill='white',
color='black')
#3.1.2修改组边界 boundary
ggplot(faithful,aes(x=waiting))+
geom_histogram(binwidth = 5,
boundary=31,
fill='white',
color='black')


#3.2 变量分组绘图 --将分组变量映射给fill
#3.2.1 不使用分面
#position = 'identity' 取消条形堆积进行垂直堆积,很有必要
library("MASS", lib.loc="D:/R/R-3.6.0/library")
#str(birthwt)
birthwt$smoke<-factor(birthwt$smoke)
ggplot(birthwt,aes(x=bwt,fill=smoke))+
geom_histogram(position = 'identity',alpha=0.4)

#3.2.2 使用分面
#各声部歌手身高的分布,根据voice.part因子水平进行颜色填充 p414
#str(singer)
data(singer,package='lattice')
ggplot(singer,aes(x=height,fill=voice.part))+
geom_histogram()+
facet_wrap(~voice.part,nrow=4)


-------------------------------------------------------------------

4 密度图

#4.1不分组密度图
ggplot(faithful,aes(x=waiting))+
geom_density(fill='purple',alpha=0.3)

#坐标是自动设定的,可能会导致曲线的边缘被裁剪,可手动设定xlim
#使用geom_line为顶部添加一条线条
ggplot(faithful,aes(x=waiting))+
geom_density(fill='purple',
color=NA, #color=NA不绘制边缘线条
alpha=0.3)+
#geom_line(stat = 'density')+
xlim(c(35,105))

#4.2 使用geom_line(不绘制两侧和底部构成封闭的图形)
#adjust参数调整曲线光滑程度,默认1.值越大曲线越光滑
ggplot(faithful,aes(x=waiting))+
geom_line(stat = 'density',adjust=0.75)+
xlim(35,105)

#4.3 密度图+直方图
#可以观测理论分布(密度图)和实际分布(直方图)的差异
#将密度曲线叠加到直方图上时,设置y=..density..,还可减小直方图的标度
#使其与密度曲线的标度相匹配,注意先运行geom_histogram
#语法规定类似用“..”围起来的变量,属于统计变换的生成变量,是为了防止原始数据集和生成变量重名而混淆
ggplot(faithful,aes(x=waiting,y=..density..))+
geom_histogram(binwidth = 5, #指定组距
boundary=31, #指定边界
fill='orange',
color='black',
alpha=0.25)+
#geom_density(size=1.1)+
geom_line(stat = 'density',size=1.1)+
xlim(35,105)

#要将直方图和密度图绘制在同一图形中,最佳方案使用分面
#因为将直方图和密度图绘制在同一张图形的其他方法都是不利于解释的
data(singer,package='lattice')
ggplot(singer,aes(x=height,y=..density..))+
geom_histogram(size=0.2)+
geom_density()+
facet_grid(voice.part~.) #刻面


#4.4分组密度图
#4.4.1使用geom_density()
#4.4.1.1 以学术等级(rank)分组的大学薪水密度图p411
library("car", lib.loc="D:/R/R-3.6.0/library")
ggplot(Salaries,aes(x=salary,fill=rank))+
geom_density(alpha=0.3)

#4.4.1.2密度图+分组和刻面
data(singer,package='lattice')
ggplot(singer,aes(x=height,fill=voice.part))+
geom_density()+
facet_grid(voice.part~.) #刻面

#4.5 二维(2D)数据密度图 stat_density_2d函数
str(faithful)
p<-ggplot(faithful,aes(x=eruptions,y=waiting))
#1 默认使用等高线
p+geom_point()+
stat_density_2d()
#2 可使用..level..将密度等高线的高度映射给等高线的颜色
p+stat_density2d(aes(color=..level..))
#3 带数据点,将密度估计映射给alpha的瓦片图
p+geom_point()+
stat_density2d(aes(alpha=..density..),geom='tile',contour=F)


-------------------------------------------------------------------

5 条形图

#5.1默认统计变换为计数
#按学术等级和性别划分教授数量
library("car", lib.loc="D:/R/R-3.6.0/library")
ggplot(Salaries,aes(x=rank,fill=sex))+geom_bar()

#分组条形图中使用位置调整positon
#1堆叠分组条形图(横轴分组,纵轴计数)
ggplot(diamonds,aes(color,fill=cut))+geom_bar()
ggplot(diamonds,aes(color,fill=cut))+geom_bar(position="stack")

#2堆叠百分比条形图(横轴分组,纵轴百分比,每组高度相等总百分比为1)
ggplot(diamonds,aes(color,fill=cut))+geom_bar(position="fill")
#使用fill时,添加labs(y='proportion')将标签改为百分比便于理解
ggplot(Salaries,aes(x=rank,fill=sex))+
geom_bar(position='fill')+
labs(y='proportion')
#3并排分组条形图(横轴分组,纵轴各组值并排摆放计数)
ggplot(diamonds,aes(color,fill=cut))+geom_bar(position="dodge")

#5.2 修改纵轴统计值
#柱形图变量aes中使用了y= 必须使用geom_bar(stat="identity")
#以各类内部的排放量作为对应的 y 值,对每个x水平进行累加(求和)
ggplot(mpg, aes(x=class, y=displ)) +
geom_bar(stat="identity")


# 权重,跟上面异曲同工。求和每个 class 内的排放总量
ggplot(mpg, aes(class)) +
geom_bar(aes(weight=displ,fill='red'))+
theme(legend.position = 'none') #不显示图例

# 每个class下,按照 drv 的水平(三个)分别计数
#这是一种堆积条形图
#str(mpg)
ggplot(mpg, aes(class)) +
geom_bar(aes(fill=drv))


----------------------------------------------------------

6 折线图(线+点)

#展示五种橘树随时间推移的生长情况
str(Orange)
library("ggplot2", lib.loc="D:/R/R-3.6.0/library")
Orange$Tree<-factor(Orange$Tree,order=F) #将Tree转成无序变量
ggplot(Orange,aes(x=age,y=circumference,color=Tree,
shape=Tree))+
geom_point()+
geom_line(size=1)

-----------------------------------------------------------

7 小提琴图

#适用于对多组数据分布进行比较,多与箱线图共同绘制
#小提琴图也是核密度估计,但绘图时对核密度曲线取了镜像以使形状对称
#小提琴默认的坐标范围是数据的最小值到最大值,
#其扁平的尾部在这两个位置处截断,通过trim=F可以保留小提琴的尾部
#默认情况下,系统会对小提琴图进行标准化,使得各组数据对应的图形面积一样
#通过scale='count'可以取消标准化(但图形会不好看)
data(singer,package='lattice')
ggplot(singer,aes(x=voice.part,y=height))+
geom_violin(fill='lightblue',
trim=T ,#默认截断尾部
adjust=1.5 #调整小提琴平滑程度,默认1,越大越平滑
)+
geom_boxplot(fill='lightgreen',width=0.2)

--------------------------------------------------------------------

8 多个图形放到单个图形中

#将多个ggplot2图形放到单个图形中 p421
library("gridExtra")
p1<-ggplot(Salaries,aes(x=rank,fill=rank))+
geom_bar()+
theme(legend.position = 'none')
p2<-ggplot(Salaries,aes(x=sex,fill=sex))+
geom_bar()+
theme(legend.position = 'none')
p3<-ggplot(Salaries,aes(x=yrs.since.phd,y=salary,
linetype=sex,shape=sex,
color=sex))+
geom_point()+
theme(legend.position = 'none')
grid.arrange(p1,p2,p3,ncol=3)

---------------------------------------------------------------------

9 分组和刻面

#关于刻面的用法p414
# 实例:变速箱类型和发动机装置每个组合的分离散点图P406
library('ggplot2')
str(mtcars)
mtcars$am<-factor(mtcars$am,
levels = c(0,1),
labels =c("Automatic","Manual"))
mtcars$vs<-factor(mtcars$vs,
levels = c(0,1),
labels = c('V-Engine','Straight Engine'))
mtcars$cyl<-factor(mtcars$cyl)
ggplot(data=mtcars,aes(x=hp,y=mpg,shape=cyl,color=cyl))+
geom_point(size=3)+
facet_grid(am~vs)+
labs(title='auto data by engine type',
x='horsepower',
y='miles per gallon')

----------------------------------------------------------------------

10 标尺

#View(mtcars)
ggplot(mtcars,aes(x=wt,y=mpg,size=disp))+
geom_point(shape=21,color='orange')
---------------------------------------------------------------------

11保存图形

#默认保存到当前路径下
ggsave(filename = 'mygraph.png', #图形命名
plot = myplot, #指定图形对象,忽略plot选项最近创建的图形都会被保存
width =5 , #单位英寸
height = 4) #单位英寸