ggplot2是R中用于绘图的高级程序包,它将绘图视为一种由数学空间到图形元素空间的映射,在画图时采用了图层的设计方式,允许用户一步步构建图形,并且便于图层的修改。
快速绘图
函数qplot()
qplot函数可用于绘制散点图,通过改变参数geom,可以绘制多种图形样式。
- geom=“points” 绘制散点图(两个参数时默认绘制散点图)
- geom=“smooth” 对所有散点拟合一条曲线
- geom=“boxplot” 生成数据点分布的箱线图
- geom=“path” 和 geom=“line” 在数据点之间连线,常用于绘制时间序列图
- geom=“histogram” 绘制直方图(一个参数时默认绘制直方图)
- geom=“freqpoly” 绘制频数多边形
- geom=“density” 绘制密度函数图
- geom=“bar” 绘制条形图
使用ggplot2中的diamonds数据集为例
sample=diamonds[sample(nrow(diamonds),1000),]
qplot(carat,price,data=sample,color=color)
qplot(carat,price,data=sample,geom=c("point","smooth"),span=0.3)
qplot(carat,data=diamonds,geom="histogram",binwidth=0.1,xlim=c(0,3),fill=color)
运行结果如下:
分图层绘图
ggplot()真正引入了图层的概念,可以更加灵活地绘图和修改。图层允许用户一步一步地构建图形,程序包中包含很多类函数,例如数据、映射、几何对象、统计变换等,每类函数都可以作为一个单独的图层。
1.数据和映射
用ggplot定义第一个图层,该图层将数据中的变量通过Mapping映射到图形属性。
sample=diamonds[sample(nrow(diamonds),1000),]
p=ggplot(data=sample,aes(x=carat,y=price,color=clarity))
2.几何对象
基本图层确定了数据源和映射后,通过加号(+)就可以不断地添加新的图层,一般的步骤是第二层添加几何对象类的函数,在图中绘制图形元素,如点、线、多边形等,还可以用来绘制其他类型的图形,如直方图、箱线图等。
几何对象类别的函数以“geom_”开头,后面接所需的图形样式,与qplot()中的参数geom是一致的。一些常用的函数如下:
p+geom_point()+geom_smooth()
或:
d=ggplot(data=sample,aes(x=carat,y=price,color=clarity))+geom_point()+geom_smooth()
print(d)
该图第二个图层geom_point()中没有设置参数,则根据第一层的参数设置,以系统默认的方式绘图。
运行结果如下:
若在geom_point()中设置了参数,那么其反映的属性仅针对这一层的图形,不会对其他图层产生影响。
对上面的图形进行整体平滑,将参数color设置在第二图层geom_point()中,则第三图层的平滑曲线不会再根据clarity分类绘制。
p=ggplot(data=sample,aes(x=carat,y=price)) #这里不再指定color的分类变量
p+geom_point(aes(color=clarity))+geom_smooth() #仅第二图层分类画点
sample=diamonds[sample(nrow(diamonds),100),]
p=ggplot(data=sample,aes(x=carat,y=price))
#设置三个分类变量color, cut和clarity,分别用不同颜色、形状和大小表示
#参数alpha控制透明度
#position="jitter"对散点增加扰动,防止点的过度重叠
p+geom_point(aes(color=color,shape=cut,size=clarity),alpha=0.5,position="jitter")
3.标度
标度负责控制图形属性的显示方式,主要包括设置坐标轴刻度,修改颜色取值、图形样式等。使用标度类函数,相当于添加一个新的图层,仍用加号(+)连接函数。
- scale_x_date 显示日期标度
- scale_x_discrete 设置离散度标度
- scale_x_continuous 设置连续型刻度
它们的参数是一致的,如下:
p=ggplot(data=diamonds,aes(x=carat)) #指定x轴为carat变量
p+geom_histogram()+scale_x_continuous(limits=c(0,3))+opts(title="Hist of carat")
#可以使用xlim(0,3)代替scale_x_continuous(limits=c(0,3))
#opts(title) #添加图像标题
p=ggplot(data=diamonds,aes(x=carat,fill=color))
#注意,由于要绘制直方图,color应该映射到参数fill表示填充颜色
p+geom_histogram()+xlim(0,3)+scale_colour_manual(values=rainbow(7))
4.统计变换
统计变换函数以“stat”开头,可以对原始数据进行某种函数变换。
- stat_ecdf 在原始数据基础上计算经验累积分布函数并画出曲线图
- stat_idenstity 绘制核密度估计曲线图
- stat_qq 绘制qq图
- stat_smooth 添加平滑曲线
- stat_unique 删除重复值
- stat_function 自定义函数并绘出图形
sample=diamonds[sample(nrow(diamonds),1000),]
ggplot(sample,aes(x=carat,y=price))+geom_point()+scale_y_log10()+stat_smooth()
第二图层添加散点,第三图层对y轴作log10变换,第四图层添加平滑的统计变换,运行结果如下:
5.分面
当我们想要观察某一分类变量对数据的影响情况时,往往需要根据变量的不同取值进行分组、分别绘图,这时就要用到facet函数,它控制数据分组的方法和排列形式,进行条件绘图。
ggplot(sample,aes(x=carat,y=price))
+geom_point(aes(colour=cut))
+scale_y_log10()+stat_smooth()
+facet_wrap(~cut,ncol=3)
在geom_point()中将cut映射到颜色属性中,facet_wrap()中的ncol=3表示每行画3个图,运行结果如下:
6.坐标系统
坐标系统可以对坐标轴进行某种变化以满足不同的绘图需求,主要的函数如下:
在ggplot2中饼图就是柱状图,只不过使用的是极坐标,条形图的高度对应为饼图的角度。
ggplot(diamonds)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar(theta="y")
转载:https://blog.csdn.net/weixin_43645790/article/details/104519111