小言_互联网的博客

R语言:ggplot2程序包

507人阅读  评论(0)

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场