ggplot2绘图R语言

R013 绘图简介

2020-09-14  本文已影响0人  caoqiansheng

1.R的四种主要图形系统

2. ggplot

在ggplot2中,图是采用串联起来 image.png

2.3 几何图形的堆叠
library(ggplot2)
data(singer, package="lattice")
ggplot(singer, aes(x=voice.part, y=height)) +
geom_violin(fill="lightblue") +
geom_boxplot(fill="lightgreen", width=.2)
image.png
2.4 分组

在R中,组通常用分类变量的水平(因子)来定义。分组是通过ggplot2图将一个或多个带有诸如形状、颜色、填充、尺寸和线类型的视觉特征的分组变量来完成的。

  • ggplot()声明中的aes()函数负责分配变量(图形的视觉特征)
  • 变量应该设在aes()函数内,分配常数应该在aes()函数外,变量在aes()内外的效果是完全不同的
  • 需要注意的是,分组可能是连续变量,在指定颜色时可能会报错,因此需要先转换为分类因子
## 初次使用需install.packas("car")
library(car)
## 加载Salaries可能会报错,但是不影响出图
data(Salaries, package="car")
library(ggplot2)
## aes()指定分组
## 填充设置透明度(alpha),使重叠曲线不掩盖彼此
ggplot(data=Salaries, aes(x=salary, fill=rank)) +
  geom_density(alpha=.3)
image.png
2.5 刻面
  • 基础画图的mfcol,mfrow,layout不适用与ggplot
  • 可以使用facet_wrap()函数和facet_grid()函数创建网格图形(在ggplot2中也称刻面图)
语法 结果
facet_wrap(~var,ncol=n) 将每个var水平排列成n列的独立图
facet_wrap(~var,nrow=n) 将每个var水平排列成n行的独立图
facet_grid(rowvar~colvar) rowvar和colvar组合的独立图,其中rowvar表示行,colvar表示列
facet_grid(rowvar~.) 每个rowvar水平的独立图,配置成一个单列
facet_grid(.~colvar) 每个colvar水平的独立图,配置成一个单行
data(singer, package="lattice")
library(ggplot2)
ggplot(data=singer, aes(x=height)) +
  geom_histogram() +
  facet_wrap(~voice.part, nrow=4)
image.png
2.6 添加光滑曲线
  • geom_smooth()函数被用来添加一系列的平滑曲线和和置信区域
选 项 描 述
method= 使用的平滑函数。允许的值包括lm、glm、smooth、rlm和gam,分别对应线性、广义线性、loess、健壮线性和广义相加模型。smooth是默认值
formula= 在光滑函数中使用的公式。例子包括y~x(默认),y ~ log(x),y~poly(x,n)表示n次多项式拟合,y ~ ns(x,n)表示一个具有n个自由度的样条拟合
se 绘制置信区间(TRUE/FALSE)。默认为TRUE
level 使用的置信区间水平(默认为95%)
fullrange 指定拟合应涵盖全图(TRUE)或仅仅是数据(FALSE)。 默认为FALSE
  • 注意:ggplot2包中含有大量统计函数来计算所需要的量,从而生产更多的可视化数据。通常情况下几何函数隐式地调用统计函数,我们不需要直接处理这些问题。例如geom_smooth()函数依赖于stat_smooth()函数来计算画出一个拟合曲线及其置信限所需的数量。在探索几何函数如何工作和哪些选项可供选择时,一定要检查这个函数及其相关统计函数。
library(car)
data(Salaries, package="car")
library(ggplot2)
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) +
  geom_smooth() + geom_point()
image.png
2.7 修改ggplot2 图形的外观
  • 基础函数使用par()函数或特定画图函数的图形参数来自定义基本函数。
    但是改变基本图形参数对于ggplot2图形没有影响
2.7.1 坐标轴
  • ggplot2包会在创建图时自动创建刻度线、刻度标记标签和坐标轴标签
  • labs()函数可用来来添加标题并改变坐标轴标签
  • 控制坐标轴及刻度线外观的函数
    ggplot2的函数区分x轴和y轴,以及轴线是否代表一个连续或离散变量(因子)(连续:continuous,离散:discrete)
    | 函 数 | 选 项 |
    | - | - |
    | scale_x_continuous()和scale_y_continuous() | breaks=指定刻度标记,labels=指定刻度标记标签,limits=控制要展示的值的范围 |
    | scale_x_discrete()和scale_y_discrete() | breaks=对因子的水平进行放置和排序,labels=指定这些水平的标签,limits=表示哪些水平应该展示 |
    | coord_flip() | 颠倒x轴和y轴 |
library(car)
## 可能会报错没有‘Salaries’这个数据集,但不影响出图
data(Salaries,package="car")
library(ggplot2)
ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) +
  geom_boxplot() +
## 设置离散型变量x,x轴标签通过labels设置,“\n”为换行显示防止标签过长  
  scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),
                   labels=c("Assistant\nProfessor",
                            "Associate\nProfessor",
                            "Full\nProfessor")) +
## 设置离散型变量y 
    scale_y_continuous(breaks=c(50000, 100000, 150000, 200000),
                     labels=c("$50K", "$100K", "$150K", "$200K")) +
## 标题设置为labs(),与轴标签“labels=”进行区分
  labs(title="Faculty Salary by Rank and Sex", x="", y="")
image.png
2.7.2 图例
  • ggplot2包能自动生成图例,而且在很多时候能够满足我们的需求;但是在其他时候,我们可能要对其进行自定义。$\color{red}{标题和位置}是最常用的定制特征。
  • 当更改图例的标题时,必须考虑图例是否基于颜色、填充、尺寸、形状或它们的组合。通常情况下aes()函数分组会自动生成图例,我们可以通过更改分组变量,如将fill="mytitle"加到labs()函数中来改变标题。
  • 标题的位置由theme()函数中的legend.position选项控制。可能的值包括"left"、"top"、"right"(默认值)和"bottom"。我们也可以在图中给定的位置指定一个二元素向量
  • 如果想删除图例,可以使用legend.position="none"
data(Salaries,package="car")
library(ggplot2)
ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) +
  geom_boxplot() +
  scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),
                   labels=c("Assistant\nProfessor","Associate\nProfessor",
                            "Full\nProfessor")) +
  scale_y_continuous(breaks=c(50000, 100000, 150000, 200000),
                     labels=c("$50K", "$100K", "$150K", "$200K")) +
  labs(title="Faculty Salary by Rank and Gender",
       x="", y="", fill="Gender") +
  theme(legend.position=c(.1,.8))
image.png
2.7.3 标尺

ggplot2包使用标尺aes("size=")把数据空间的观察值映射到可视化的空间中。标尺既可以应用到连续的变量,也可以应用到离散的变量
可以使用标尺将带有因子水平的视觉线索(如颜色、形状、线条类型、
尺寸和透明度)关联起来

  • 尺寸
## aes()函数的参数size=disp生成连续型变量disp(发动机排量)的标尺,并使用它来控制点的尺寸
ggplot(mtcars, aes(x=wt, y=mpg, size=disp)) +
  geom_point(shape=21, color="black", fill="cornsilk") +
  labs(x="Weight", y="Miles Per Gallon",
       title="Bubble Chart", size="Engine\nDisplacement")
image.png
  • 颜色
data(Salaries, package="car")
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +
  scale_color_manual(values=c("orange", "olivedrab", "navy")) +
  geom_point(size=2)
image.png

可以通过scale_color_brewer()和scale_fill_brewer()函数来预先指定分得清的颜色集
为了得到可获得的颜色集,可以使用:

library(RColorBrewer)
display.brewer.all()
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +
  scale_color_brewer(palette="Set1") + geom_point(size=2)
image.png
2.7.4 主题

theme()函数中的选项可以让我们调整字体、背景、颜色和网格线等。主题可以使用一次,也可以保存起来应用到多个图中。

主题元素 类型 描述
line 所有线属性
rect 所有矩形区域属性
text 所有文本属性
title 所有标题属性
plot.title text 图表标题
plot.background rect 图表背景
plot.margin 图表边距
panel.background rect 绘图区背景
panel.border rect 绘图区边框
panel.margin rect 绘图区边距
panel.grid line 网格线系统
panel.grid.major line 主网格线
panel.grid.minor line 次网格线
panel.grid.major.x line x轴主网格线
panel.grid.major.y line x轴次网格线
panel.grid.minor.x line y轴主网格线
panel.grid.minor.y line y轴次网格线
axis.line line 坐标轴线
axis.line.x line x坐标轴线
axis.line.y line y坐标轴线
axis.title text 轴标题
axis.title.x text x轴标题
axis.title.y text y轴标题
axis.text text 轴标签
axis.text.x text x轴标签
axis.text.y text y轴标签
axis.ticks line 坐标轴刻度线
axis.ticks.x line x坐标轴刻度线
axis.ticks.y line y坐标轴刻度线
axis.ticks.length line 刻度线长度
axis.ticks.margin line 刻度线与刻度线标签间的间距
legend.background 图例背景
legend.margin 图例边界
legend.key 图例符号
legend.key.size 图例符号大小
legend.key.height 图例符号高度
legend.key.width 图例符号宽度
legend.text 图例文本标签
legend.text.align 图例文本对齐方式,0=左对齐,1=右对齐
legend.title 图例标题
legend.title.align 图例标题对齐方式
legend.position 图例位置,left,right,bottom,top,二维向量
legend.direction 图例排列方向,horizontal,vertical
legend.justification 图例居中方式,center,或者向量
legend.box 多图例排列,horizontal,vertical
data(Salaries, package="car")
library(ggplot2)
mytheme <- theme(plot.title=element_text(face="bold.italic",
                                         size="14", color="brown"),
                 axis.title=element_text(face="bold.italic",
                                         size=10, color="brown"),
                 axis.text=element_text(face="bold", size=9,
                                        color="darkblue"),
                 panel.background=element_rect(fill="white",
                                               color="darkblue"),
                 panel.grid.major.y=element_line(color="grey",
                                                 linetype=1),
                 panel.grid.minor.y=element_line(color="grey",
                                                 linetype=2),
                 panel.grid.minor.x=element_blank(),
                 legend.position="top")
ggplot(Salaries, aes(x=rank, y=salary, fill=sex)) +
  geom_boxplot() +
  labs(title="Salary by Rank and Sex", x="Rank", y="Salary") +
  mytheme
image.png
2.7.5 保存图形

ggsave()函数能更方便地保存图形。它的选项包括保存哪幅图形,保存在哪里和以什么形式保存

ggsave( filename,
  plot = last_plot(),
  device = NULL,
  path = NULL,
  scale = 1,
  width = NA,
  height = NA,
  units = c("in", "cm", "mm"),
  dpi = 300,
  limitsize = TRUE,
  ...
)

Reference

1.R语言实战第二版
2.https://blog.csdn.net/kmd8d5r/article/details/79386843

上一篇 下一篇

猜你喜欢

热点阅读