Class 6
#本文引用自生信技能树
【知识拓展】
【1.当不确定自己输入的代码是否正确时,可以用attach()括号内填入你想使用的数据,这样当你想用a数据里面的某列名字时,可以直接用Tab打出他的名字并且不会出错
如
】
【2.当写代码时,大小写要保持一致,比如一部分要大写其他部分就一定要大写】
【打开文件的正确方式是在Rstudio的界面的右下角工作目录里面的文件】
【课堂内容】
一、画图的目的是展示自己的数据!
常用的可视化R包:
画图:base【随软件自动下载】、ggplot2(*很重要)、ggpubr(低配版ggplot2)
拼图:Par里的mfrow、grid.arrange、cowplot、customLayout、patchwork(*很重要)
导出:经典三段论、ggsave(*很重要)、eoffice-topptx【不建议点鼠标、建议写代码】
二、画图
1.基础包【了解】
· 高级绘图函数:【传递数据-出图】
Plot()多种图形、Hist()频率直方图
· 低级绘图函数:必须有现成的图,不可能直接传递数据出图,只是往上面添加东西。
(1)Plot()多种图形
plot(iris[,1],iris[,3],col = iris[,5])
做一个横坐标用iris第一列的数据,纵坐标用第三列的数据,颜色用第五列数据的图
> text(6.5,4, labels = 'hello')
横坐标为6.5,纵坐标为4,的点命名为hello
【提示:dev.off() #关闭画板】
(2)ggplot2【非常完善且好用】【灰色背景的图,就是ggplot2默认的背景】
Eg.
library(ggplot2)
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,color = Species))
3.ggpubr 【好看、但不能满足所有需求】新手友好 ggplot2简化和美化
library(ggpubr)
ggscatter(iris, x="Sepal.Length", y="Petal.Length", color="Species")
三、详细ggplot2语法【展示自己的数据!可以,颜值调整、细节调整以后再查再学】
1.【最常用】入门级绘图模板:作图数据,横纵坐标
ggplot(data = iris-数据)+
geom_point-图类型(mapping=aes映射(x = Sepal.Length, y = Petal.Length-x、y是多少))
x和y的值是变量、带括号的是函数
Eg.ggplot(data = iris)+ geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length))
【ggplot2的特殊语法:列名不带引号,行末写加号】
2. 手动设置属性-颜色、大小、透明度、点的形状、线型
颜色:手动设置【与数据本身无关、人工】--需要写有意义的值
Color:字符串如“blue”、“red”
大小:单位如mm
形状:数字编号表示【有25个数字对应的形状】
Eg. ggplot(data = iris) +
+ geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length),
+ color="blue", #颜色为蓝色
+ size = 5, # 点的大小5mm
+ alpha = 0.5, # 透明度 50%
+ shape = 8) # 点的形状
3.映射
作用:按照数据框的某一列来定义图的某个属性
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,
color = Species))-----代表aes的参数,是列名
【color = Species图的颜色按species中的数字来分配,同种类的同个颜色】
【映射—与数据有关是aes,根据数据的某一列的内容分配颜色【自动分配颜色,修改颜色】】
比较:映射与手动设置【手动---与数据内容无关,与第几个点有关系,易出错】
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length),
color = "blue")---geom_point的参数,是具体颜色
【代码差别:color=“blue”/colnames【字符串是geom_point的参数是具体的颜色/是列名与aes的参数与数据有关】
4. 能不能自行指定映射的具体颜色?
ggplot(data = iris)+ geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,
color = Species))+-----必须有,加号不能忘
scale_color_manual(values = c("blue","grey","red"))
↑自行规定映射颜色,数据中就三种类型, 所以只赋值三种颜色
【想要什么颜色就有什么颜色,具体要按投稿杂志喜好】
5. 区分color和fill两个属性
都是颜色,但用法不同
需要看设置颜色的形状
1)空心形状和实心形状都用color设置颜色
#实心的例子--一种颜色
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species),shape = 17) #点的类型是17号,
#空心的例子----外框color颜色、内芯颜色
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species),shape = 2)
#既有边框又有内芯,才需要color和fill两个参数
#双色的例子----外框color颜色、内芯fill颜色
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species), shape = 24, fill = "black")
6.分面:把一张图分成多张子图facet_wrap(~ Species)
Species有三个取值,可分为三张图
ggplot(data = iris) + geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +
facet_wrap(~ Species) ----根据其中一列来分面
species有三种品种,分三张图
7. 双分面facet_grid(Group ~ Species)
Dat = iris
dat$Group = sample(letters[1:5],150,replace = T)原表中没有的列名,用$可代表新增一列!
从letter里面取3个数据,随机取出!---随机取样函数!
Sample函数
Letters[1:5]:a,b,c,d,e
Sample(Letters[1:5],3)不能超出总体还要大的参数
当replace=F-不放回的取样,就可以满足超出总体的参数
Sample(Letters[1:5],3, replace=T)-----可以运行
【不要修改内置数据,因为你会忘记改过它】
【只要发现改过它】
+ggplot(data = dat) +
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +
facet_grid(Group ~ Species)
8. .几何对象!=图层!
趋势线图、几何图!
在点图上叠加!用加号叠加函数!
ggplot(data = iris) +
geom_smooth(mapping = aes(x = Sepal.Length,
y = Petal.Length))+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length))
【局部】
简化版【当aes的x与y相同可都放在ggplot】
ggplot(data = iris,mapping = aes(x = Sepal.Length, y = Petal.Length))----【全局】
+geom_smooth()+
geom_point()
相同的部分可以放在全局的ggplot函数中,不相同的部分可以放在各自局部的函数中
没有不一致的地方,可空着
【局部与全局的区别,局部设置只对当前图层有效;全局设置,对所有图层有效】
9. .波浪号连接!
10统计变化:
Diamond是内置数据,---用柱状图统计一列有多少取值,出现多少次
可用table统计
1)如果要画出柱状图:有两个函数可以使用
View(diamonds)
table(diamonds$cut)
· ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut))自动统计y
· ggplot(data = diamonds) +
stat_count(mapping = aes(x = cut))
2)使用:使用表中数据直接作图,而不统计
【已经有x、y,不统计,数据直接做图】
fre = as.data.frame(table(diamonds$cut))
ggplot(data = fre) +
geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity"-实际的参数,允许你使用自己的横纵坐标)
3)使用:不统计count,统计prop(比例)
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1--比例的计算作为一个整体))
11.位置关系
1)抖动的点图geom_jitter()
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) + geom_boxplot()
+ geom_jitter()---抖动的点的函数,带有随机性,相当于geom_ponit
2)堆叠直方图
堆叠式直方图
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut,fill=clarity))
并列式直方图position="dodge"
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")改变位置关系
12.坐标系
1)#翻转坐标系coord_flip()---变成横行的坐标
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot() +
coord_flip()
2)极坐标系coord_polar()---以扇形的表示、饼图
bar <- ggplot(data = diamonds) +
geom_bar( mapping = aes(x = cut, fill = cut), width = 1 ) +
theme(aspect.ratio = 1) +
labs(x = NULL, y = NULL)
bar + coord_polar()
三、ggpubr.R
赋值p <- ggboxplot(iris, x = "Species", y = "Sepal.Length",color = "Species", shape = "Species",
add = "jitter")抖动的点图
计算p值【两两比较】comparisons
my_comparisons <- list( c("setosa", "versicolor"),
c("setosa", "virginica"),
c("versicolor", "virginica") )
# Add pairwise comparisons p-value
p + stat_compare_means(comparisons = my_comparisons)+
stat_compare_means(label.y = 9) 【加上总体p值】
四、图片的保存及导出
#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")
五、拼图
R包patchwork
当代码可运行却不出图--因为画板被占用
Dev.off()----关闭画板
Null device1----已经关闭画板
Dev.new()-----新建画板
重新运行出图代码,直到出图为止
六、去哪找现成的画图代码
Rgallary
STHDA
人工调整横坐标顺序
画图代码+你的数据+解决问题的能力=你的图
画图的正确思维=可化为己用
1. 我的数据适合用什么图展示z
2. 搜索画图代码
代码可复制,图片美观
提供了代码配套的示例数据
示例代码+示例数据是兼容的
3. 仿制示例数据
数据类型、结构
组织方式、对应关系
4. 套代码,调整细节
【练习题:
1.加载test.Rdata,分别test的以a和b列作为横纵坐标,change列映射颜色,画点图。
load("test.Rdata")
ggplot(data=test)+geom_point(mapping = aes(x=a,y=b,color=change))
2.尝试修改点的颜色为暗绿色(darkgreen)、灰色、红色
ggplot(data=test)+geom_point(mapping = aes(x=a,y=b,color=change))+scale_color_manual(values=c("darkgreen","grey","red"))
修改颜色的顺序可以:c("red ","grey"," darkgreen ")
【R语言里面的足够使用的颜色R包】
Library(paletteer)
Library(Rcolorbrewer)
2.箱线图【有离群值,点是属于箱线图】
ggplot(data = iris,mapping = aes(x=Species,y =Sepal.Length,Color =Species))
+geom_boxplot()
ggplot(data = iris,mapping = aes(x=Species,y=Sepal.Length,fill=Species))
+geom_boxplot()
2. 画叠加图的时候:函数的关系是先写先放
ggplot( iris,aes(Sepal.Width,Species))+
geom_point()+
geom_violin()+
geom_boxplot()
geom_violin()+
geom_boxplot()+
geom_point()
geom_violin()+
geom_boxplot()+
geom_jitter()
ggplot( iris,aes(Sepal.Width,Species))+
geom_violin(mapping = aes(fill=Species))+----- 需要加入映射
geom_boxplot()+
geom_jitter(aes(shape=Species))+ ---将点的形状改变,需要用到映射
theme_classic()---去掉灰色界面
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。