R语言实战第四章 图形初阶

数据基础: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_/函数

函数 添加的图形 选项
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()

Rplot.jpeg

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()
4bf4e422-b927-4ba9-995e-2fba515c926b.png

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()
image.png

4.1.5 刻面

解决问题:针对每个职业绘图
刻面为给定的某个变量(或变量组合)的每一个水平分别绘制一张图。
使用函数 \color{#A52A2A}{facet_wrap() 和 facet_grid() } 因子: \color{#A52A2A}{var, rowvar, colvar}
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) 每个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()
image.png

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()
image.png

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()
image.png

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()
image.png

与以上代码相比,将性别到颜色的映射方到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()
image.png

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格式为向量格式,这些格式的文件在调整大小时不会出现图片模糊或者锯齿状,其他格式为位图格式,调整大小时会出现锯齿。

扩展名 格式
pdf 便携式文档格式,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")

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,548评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,069评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,985评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,305评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,324评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,030评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,639评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,552评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,081评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,194评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,327评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,004评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,688评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,188评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,307评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,667评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,337评论 2 358

推荐阅读更多精彩内容