数据基础:mosaicData包和ggplot2包
install.packages(c("mosaicData","ggplot2"))
4.1 使用ggplot2包创建图形
4.1.1 函数ggplot()
ggplot()函数需要两组参数
- 一个是数据框data,其中包含需要绘制的数据
- 一个是一组映射mapping,将数据进行图形可视化的操作,函数为aes(),表示为美化或可以看到的东西
library(ggplot2)
library(mosaicData)
ggplot(data = CPS85, mapping = aes(x= exper,y=wage))
4.1.2 geom_函数
geom_函数是在图形上放置的几何对象(点、线、条和阴影区域)。
函数 | 添加的图形 | 选项 |
---|---|---|
geom_bar() | 条形图 | color,fill,alpha |
geom_boxplot() | 箱线图 | color,fill,alpha,notch,width |
geom_density() | 核密度图 | color,fill,alpha,linetype |
geom_histogram() | 直方图 | color,fill,alpha,linetype,binwidth |
geom_hline() | 水平线条 | color,alpha,linetype,size |
geom_jitter() | 抖动点 | color,size,alpha,shape |
geom_line() | 线图 | colorvalpha,linetype,size |
geom_point() | 散点图 | color,alpha,shape,size |
geom_rug() | 地毯图 | color,side |
geom_smooth() | 拟合曲线 | method, formula, color, fill, linetype, size |
geom_text() | 文本注解 | 选项很多,详见该函数的帮助信息 |
geom_violin() | 小提琴图 | color,fill,alpha,linetype |
geom_vline() | 垂线 | color,alpha,linetype,size |
1、创建散点图,但关系并不明显,还有异常值
ggplot(data = CPS85, mapping = aes(x= exper,y=wage))+geom_point()
2、删除异常值并重新绘制
CPS85 <- CPS85[CPS85$wage < 40,]
ggplot(data = CPS85, mapping = aes(x= exper,y=wage))+geom_point()
3、color:名称或十六进制代码 size:0开始的正实数 apha:0(完全透明)-1(完全不透明)
shape:表示图俺或符号的名称或数字 theme_bw() 灰色背景变白色
ggplot(data = CPS85, mapping = aes(x=exper,y=wage))+
geom_point(color="cornflowerblue",alpha = .7, size = 1.5)+theme_bw()
4、加geom_smooth() 拟合曲线 线性回归(method=lm)线条
ggplot(data = CPS85, mapping = aes(x= exper,y=wage))+
geom_point(color="cornflowerblue",alpha = .7, size = 1.5)+
geom_smooth(method="lm") + theme_bw()
4.1.3 分组
可以将变量值映射到颜色、形状、大小、透明度、先调样式和几何对象的其他视觉特征。
如下:按照性别分组显示:
ggplot(data = CPS85, mapping = aes(x= exper,y=wage,color=sex,shape=sex,linetype=sex))+
geom_point(alpha = .7, size = 1.5)+
geom_smooth(method="lm", se = FALSE, size=1.5) + theme_bw()
4.1.4 标尺
标尺i用于指定每个映射是如何进行的,比如ggplot2会自动创建带刻度、刻度标签和轴标签的图形坐标轴。标尺函数(以scale_开始)允许我们修改默认的标尺设置。
函数 | 描述 |
---|---|
scale_x_continuous(), scale_y_continuous() | 缩放定量变量的x和y轴。选项包括用于指定刻度标记的breaks,用于指定刻度标记标签的labels,以及用于控制显示的值范围的limits |
scale_x_discrete(), scale_y_discrete() | 与上述表示分类变量的坐标轴相同 |
scale_color_manual() | 指定代表分类变量层级的颜色。values选项指定颜色 |
例:seq()重新定义x和y轴的刻度,自定义性别的颜色映射,scales::dollar更改y轴单位
install.packages("scales")
ggplot(data = CPS85, mapping = aes(x= exper,y=wage,color=sex,shape=sex,linetype=sex))+
geom_point(alpha = .7, size = 3)+
geom_smooth(method="lm", se = FALSE, size=1.5) +
scale_x_continuous(breaks=seq(0,60,10))+
scale_y_continuous(breaks=seq(0,30,5), label=scales::dollar)+
scale_color_manual(values=c("indianred3","cornflowerblue"))
+ theme_bw()
4.1.5 刻面
解决问题:针对每个职业绘图
刻面为给定的某个变量(或变量组合)的每一个水平分别绘制一张图。
使用函数 因子:
语法 | 结果 |
---|---|
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) | 每个cowvar水平的独立图,配置成一个单行 |
ggplot(data = CPS85, mapping = aes(x= exper,y=wage,color=sex,shape=sex,linetype=sex))+
geom_point(alpha = .7)+
geom_smooth(method="lm", se = FALSE) +
scale_x_continuous(breaks=seq(0,60,10))+
scale_y_continuous(breaks=seq(0,30,5), label=scales::dollar)+
scale_color_manual(values=c("indianred3","cornflowerblue"))+
facet_wrap(~sector)
+ theme_bw()
4.1.6 标签
函数labs()为坐标轴和图例提供了自定义标签。还可以添加、副标题和说明文字。
ggplot(data = CPS85, mapping = aes(x= exper,y=wage,color=sex,shape=sex,linetype=sex))+
geom_point(alpha = .7)+
geom_smooth(method="lm", se = FALSE) +
scale_x_continuous(breaks=seq(0,60,10))+
scale_y_continuous(breaks=seq(0,30,5), label=scales::dollar)+
scale_color_manual(values=c("indianred3","cornflowerblue"))+
facet_wrap(~sector)+
labs(title = "工作年限和薪资之间的关系", subtitle = "当前人口调查",
x="工作年限", y="时薪", color = "Gender" , shape="Gender", linetype="Gender")
+ theme_bw()
4.1.6 主题
我们使用主题来微调图形的外观,主题函数(以theme_开头)控制背景、颜色、字体、网格线、图里位置,以及其他与数据无关的图形特征。
ggplot(data = CPS85, mapping = aes(x= exper,y=wage,color=sex,shape=sex,linetype=sex))+
geom_point(alpha = .7)+
geom_smooth(method="lm", se = FALSE) +
scale_x_continuous(breaks=seq(0,60,10))+
scale_y_continuous(breaks=seq(0,30,5), label=scales::dollar)+
scale_color_manual(values=c("indianred3","cornflowerblue"))+
facet_wrap(~sector)+
labs(title = "工作年限和薪资之间的关系", subtitle = "当前人口调查",
x="工作年限", y="时薪", color = "Gender" , shape="Gender", linetype="Gender")+
theme_minimal()
4.2 ggplot2 包的详细信息
4.2.1 放置数据和映射选项
可以省略data= 和 mapping= ,如下所示:
其中函数ggplot()放置了aes(color=sex),因此映射也会应用到geom_point()和geom_smooth()
ggplot(CPS85, aes(x= exper,y=wage,color=sex))+
geom_point(alpha = .7,size = 1.5)+
geom_smooth(method="lm", se = FALSE, size = 1) +
scale_color_manual(values=c("lightblue","midnightblue"))+
theme_bw()
与以上代码相比,将性别到颜色的映射方到geom_point()中,而不是ggplot()中,则它仅在geom_point()中有效果,且仅创建了一条针对所有观测值不分性别的趋势线。
ggplot(CPS85, aes(x= exper,y=wage))+
geom_point(aes(color=sex),alpha = .7,size = 1.5)+
geom_smooth(method="lm", se = FALSE, size = 1) +
scale_color_manual(values=c("lightblue","midnightblue"))+
theme_bw()
4.2.2 将图形作为对象使用
ggplot2图形可以被保存为被命名的R对象(列表型数据)。可以让我们继续操作并修改这些图形。
1、准备数据
data(CPS85,package="mosaicData")
CPS85 <- CPS85[CPS85$wage<40,]
2、创建一张散点图并保存为myplot,并显示该图
myplot <- ggplot(data= CPS85 , mapping = aes(x=exper, y=wage)) + geom_point()
myplot
3、修改myplot并将其保存为myplot2,并显示该图
myplot2 <- myplot + geom_point(size=3, color="blue")
myplot2
4、显示myplot并配以最佳拟合线及标题
myplot + geom_smooth(method = "lm") + labs(title = "Mildly interesting graph")
4.2.3 保存图形
方法1:RStudio----> Plots选项卡---->Export
方法2:ggsave()
ggsave(file="mypragh.png", plot = myplot, width =5, height = 4)
如果忽略plot=选项,最近创建的图形会默认保存。
ggplot(data=mtcars, aes(x=mpg))+geom_histogram()
ggsave(file="mygraph.pdf")
图片文件格式:pdf、svg、wmf格式为向量格式,这些格式的文件在调整大小时不会出现图片模糊或者锯齿状,其他格式为位图格式,调整大小时会出现锯齿。
扩展名 | 格式 |
---|---|
便携式文档格式,MS office 不支持 | |
svg | 可伸缩式向量图,MS office 不支持 |
wmf | Windows元文件,Word和PPT推荐使用,可以很好地调整大小,但丢失透明度 |
png | 便携式网络图片,网页图片最常用的格式 |
jpeg | JPE 常用于存储照片 |
tiff | 带标记的图片文件格式,常用于存储照片 |
4.2.3 常见错误
错误写法:ggplot(CPS85,aes(x=exper, y=wage, color="blue"))+ geom_point()
结果显示的是红色散点图,为什么???
在ggplot2中,如果您想要设置点的颜色为蓝色,但您在aes()函数中错误地使用了"blue"作为颜色值,并且这个值实际上被当作了一个分类变量来处理,而不是颜色值。要在ggplot2中设置点的颜色为蓝色,您应该直接在geom_point()函数中使用color参数,而不是在aes()中设置。
注意:aes()用于将变量映射到图形的视觉特征,而给常量赋值的操作应该是在函数aes()之外进行。
正确写法:ggplot(CPS85,aes(x=exper, y=wage))+ geom_point(color="blue")