复习:
文件读取
认识csv格式
1.直接打开:切记要显示“.csv”后缀
-
记事本打开
-
sublime(适合大文件): 是一个打开纯文本的编辑器
-
R语言读取
变量名来去自如,文件名不可以单独运行;
../表示上一级;
表格文件读入到R语言里,就是一个数据框,对数据框进行的修改不会同步到表格文件;
不要覆盖源文件;
所有代码保证可以追根溯源;
认识分隔符
, 空格 tab
将表格读入R语言里,成为数据框
read. table() 通常读取txt格式文件
read. csv() 通常读取csv格式文件
Tip:如果读取失败,手动指定参数
将数据框导出,成为表格文件
write.table(变量名, file = "导出文件名")
write.csv(变量名, file = "导出文件名")
函数相当于动词,括号里相当于名词
Rdata
R特有的数据存储格式,其他软件无法打开;
保存的是变量,非表格文件,不涉及赋值;
整存整取:带着变量名和内容一起存取;
save(变量名, file = "导出文件名")保存;
load(变量名, file = "导出文件名")加载;
这样写是错误的:
x等于变量的名字组成的向量,而不是变量组成的列表
Tip:正确找到文件
- 文件要放在工作目录下
- 用tab自动补齐保证拼写正确
- 列名要识别正确:header = TRUE
- 行名要识别正确:row.names = 1
R作图
作图分三类
1.基础包 略显陈旧 了解即可
plot(iris[,1],iris[,3],col = iris[,5]) # plot是高级绘图函数
text(6.5,4, labels = 'hello') # text是低级绘图函数, lables是形式参数
boxplot(iris[,1]~iris[,5])
dev.off()# 关闭画板
低级没办法单独绘图,而高级可以,低级在高级上面添砖加瓦
2.ggplot2 中坚力量 好好学
test = iris
if(!require(ggplot2))install.packages('ggplot2')
library(ggplot2)
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))
3.ggpubr 江湖救急 ggplot2简化和美化 褒贬不一
if(!require(ggpubr))install.packages('ggpubr')
library(ggpubr)
ggscatter(iris,
x="Sepal.Length",
y="Petal.Length",
color="Species") #按照哪一列来分配颜色
[STHDA美图中心] (www.sthda.com )
ggplot2: 002_ggplot2.R
1.入门级模板
ggplot(data =<DATA>)+
geom_<function>(mapping = aes(<MAPPINGS>))
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length))#点图; 作图数据、横纵坐标
2. 属性设置
2.1手动设置
color: 仅能设置一种颜色
size: 大小单位是mm
shape: 24个数字
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy), color = "blue") # color = "blue"属于geom_point的参数,是具体的颜色,要加引号;不能放在ase里面,否则会被识别为数据来分配为默认的红色
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy),
size = 5, # 点的大小5mm
alpha = 0.5, # 透明度 50%
shape = 8) # 点的形状;或者 shape = "*"也可以
缺点:局限性大,没办法根据数据设置成不同的颜色
2.2 映射: 按照数据框的某一列来定义图的某个属性
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length, # 注意x, y 没有引号
color = Species)) # 注意color = Species在aes函数的括号内,属于aes的参数,是列名
Ps: aes,即映射
映射:领导思维,不是必须说具体用哪几种颜色,只说按照某列分配颜色
手动设置:把所有内容设置为同一个颜色,直接指定哪个颜色
Tip: 1.自行指定映射具体颜色
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))+
scale_color_manual(values = c("blue","grey","red")) #关键代码在这里,领导管的太多啦,员工说的不算还必须自己再指定下; "blue"可以由"十六进制颜色码"替换,一定要加引号;color可替换为shape、fill...
Tip2: 颜色有哪些
[十六进制颜色码转换成RGB颜色值] (https://www.sioe.cn/yingyong/yanse-rgb-16/)
Tip3: 区分color和fill两个属性
color设置空心形状和实行形状:
只能有一种颜色,要么空心、要么实心,统一用color,不能fill:
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length, color = Species),
shape = 17) #17号,实心的例子
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length, color = Species),
shape = 2) #2号,空心的例子
需要边框和内心颜色不同,同时要有color和fill两个参数:
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),
shape = 24,
fill = "black") #22号,双色的例子
2.3 分面 facet_wrap(~xxx)
优势:一张图分成多张子图,省掉分开作图拼图的步骤。
分面的列的标准是:改列得有重复值,并且重复值的数量不能太多。
ggplot(data = test) +
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +
facet_wrap(~ Species) #按照Species来分面
双分面: facet_grid(xxx~xxx) ,既有重复值,重复值又有限
test$Group = sample(letters[1:5],150,replace = T) #把abcde随机抽样,抽取150个,replace表示可放回
ggplot(data = test) +
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +
facet_grid(Group ~ Species) #按照Group来分行,按照Species来分列
小技巧:
查看内置数据集的三种方式
- view(mpg)
- test = mpg
- mpg
-- tibble
-- with more 表示另外,更多
library(ggplot2) # 一定要先加载ggplot2
mpg #运行一下才能看到内置数据集
length(unique(mpg$manufacturer))#查看某列有多少种取值
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class)) #因为color是字符型变量,颜色之间是独立的
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = displ)) #因为displ是字符型变量,颜色是渐变的
小技巧:
[配色R包]-RColorbroeer]{https://www.cnblogs.com/shaocf/p/9600340.html}
2.4 几何对象
即geom函数画出的所有图形,统称为一个图层(对象)。
几何对象可以叠加
ggplot(data = test) +
geom_smooth(mapping = aes(x = Sepal.Length, y = Petal.Length))+
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) #局部设置,仅对当前图层有效
ggplot(data = test,mapping = aes(x = Sepal.Length, y = Petal.Length))+
geom_smooth()+
geom_point() #全局设置,对所有图层有效
图层概念:geom_xxx()画出的单个几何对象
小问题:当局部设置和全局设置冲突,谁说了算?
ggplot(test,aes(x = Sepal.Length,y = Petal.Length,color = Species)) +
geom_point()+
geom_smooth(color = "black") #皇后斗不过贵妃;强龙打不过地头蛇;局部设置为准
2.5 统计变化
小知识
geom_xxx函数是几何对象函数——画xxx图
stat_xxx函数是统计函数——展示xxx统计结果
使用场景1:利用表中数据直接作图,不统计
ggplot(data = fre) +
geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity")# 加了stat = "identity"才可以写y = Frep
使用场景2:不统计count,统计比例prop
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))#group = 1把所有数据但过一个整体,计算部分占整体的比例
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, y = ..prop..),group = 1) #没有group = 1是错误写法,这样就把每组作为1,图是五个值为1的大柱子
不是所有的事情都符合常理,也没必要
2.6 (点)位置关系
2.6.1 抖动的点图
错误写法:
ggplot(data = mpg, mapping = aes(x = class, y = hwy, group = class)) +
geom_boxplot()+
geom_point() #错误的,点都重合在一起了
正确写法:
ggplot(data = mpg,mapping = aes(x = class, y = hwy, group = class)) +
geom_boxplot()+
geom_jitter()
补充dotplot,点不重合,也不奔放
ggplot(data = mpg,mapping = aes(x = class, y = hwy, group = class)) +
geom_boxplot()+
geom_dotplot(binaxis = "y",binwidth = .5,stackdir = "center")
- 6.2堆叠直方图
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut,fill=clarity))
6.3 并列直方图
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
2.7 坐标系
2.7.1 翻转coord_flip()
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot() +
coord_flip()
2.7.2 极坐标系coord_polar()
bar <- ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = cut), show.legend = FALSE, width = 1 ) +
theme(aspect.ratio = 1) +
labs(x = NULL, y = NULL)
bar + coord_flip()
bar + coord_polar()
小练习:重点看备注部分
library(ggplot2)
test = iris
ggplot(data = test,aes(Sepal.Width, Species))+ #注意结尾用+连接,表示用加号连接的代码都是在画同一张图;连接分先后顺序,谁在图层下面先写谁
geom_violin(aes(fill = Species))+ #注意要加aes,以映射的方式添加图形参数
geom_boxplot()+#不要设置aes(color = Species),否则二分位线和四分位线颜色和背景一样不能区分,虽然不报错,但图是错的
geom_point()+ #同上
geom_jitter(aes(fill = Species)) #注意要加aes,以映射的方式添加图形参数
#或者
ggplot(data = test,aes(Species,Sepal.Width))+
geom_violin(aes(fill = Species))+ #注意要加aes,以映射的方式添加图形参数
geom_boxplot()+
geom_point()+
geom_jitter(aes(fill = Species))+ #注意要加aes,以映射的方式添加图形参数
coord_flip() #反转坐标系
ggppubr: 代码在02-plots_003-ggpubr.R
- 颜值与简约;
- 代码少 ;
- 语法少;
- 生于ggplot2 美于ggplot2
- 去掉图层、映射概念;
- 图例细节仍要参考ggplot2;
- 区别在默认参数;
- 属于ggplot2扩展包;
- 可以赋值
- ggpubr 搜代码直接用,基本不需要系统学习
Tip: sthda上有大量ggpubr出的图
示例代码如下:
library(ggpubr)
ggscatter(iris,x="Sepal.Length", y="Petal.Length", color="Species")
代码说明(目前只有这一个功能ggplot2不能替代):
library(ggpubr)
ggscatter(iris,x="Sepal.Length",y="Petal.Length",color="Species")
p <- ggboxplot(iris, x = "Species", y = "Sepal.Length",color = "Species", shape = "Species",add = "jitter")
p
my_comparisons <- list( c("setosa", "versicolor"),
c("setosa", "virginica"),
c("versicolor", "virginica") ) #必须是两两比较,不能更多
p + stat_compare_means(comparisons = my_comparisons)+ # Add pairwise comparisons p-value添加两两比较的P值
stat_compare_means(label.y = 9) #label.y = 9表示总体P值所在的纵坐标的位置
图片的保存和导出:代码在02-plots_004_图片的保存和导出.R
图片保存的三种方法
1.基础包作图的保存
通用:三段论
- 保存的格式及文件名
- 作图代码
- 关闭作图
pdf("iris_box_ggpubr.pdf") #注意函数和后缀一一对应
boxplot(iris[,1]~iris[,5])
text(6.5,4, labels = 'hello')
dev.off()
2.ggplot系列图(包括ggpubr)通用的简便保存 ggsave
p <- ggboxplot(iris, x = "Species",y = "Sepal.Length",color = "Species", shape = "Species",add = "jitter")
ggsave(p,filename = "iris_box_ggpubr.png")
3.eoffice包导出为ppt,全部元素都是可编辑模式
library(eoffice)
topptx(p,"iris_box_ggpubr.pptx") #注意函数和后缀一一对应;打开PPT可以取消组合,去除背景板;不到投稿时候不要做手动设置
另外一个导出的R包:export()
拼图
[]{https://mp.weixin.qq.com/s/p7LLLvzR5LPgHhuRGhYQBQ}
ggplot2添加主题
- theme_bw()
- theme_classic()
debug:代码可以运行但是不出图,因为画板被占用
运行dev.off()直到出现null device为止,再运行出图代码或者新建一个画板dev.cew();如果还不行,那就重启session,重启Rstudio,或者重启电脑。
[画图合集]{https://www.jianshu.com/nb/35523479}