今天的主要内容是绘图,包含ggplot2、ggpurb和patchwork
开头一个小tips:在运行R project时,界面上最好每次只有一个脚本,否则不同脚本之间流程、变量容易混乱
library(ggplot2) #画图第一步,包加载到位
# 基本模板
ggplot(data=<DATA>)+
<GEOM-FUNCTION>(mapping=aes<MAPPINGS>)
#示例
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length))
注意:ggplot2的特殊语法:列名不带引号,画同一个图片的两个函数之间用“+”连接
颜色:代表颜色的字符串如“#F8E6FF”,或"blue"、"red"等表示颜色的英文字符串
大小:单位默认是mm
形状:用1~20的数字变化表示
ggplot(data = iris) +
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length),
color = "blue")
#这里手动改了颜色,注意位置是geom_point()的参数
ggplot(data = iris) +
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length),
size = 5, # 点的大小5mm
alpha = 0.5, # 透明度 50%
shape = 8) # 点的形状
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))
映射和手动设置的对比:
1.映射中color是aes()的参数,是作图数据中的某个列的列名,代表根据这一列的内容分配颜色,不加引号
2.手动设置颜色是geom_xxx()的参数,只能是颜色有关的字符串,且需要加引号
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
scale_color_manual(values = c("blue","grey","red"))
注意必须是映射,且scale_color_manual给的颜色数量需要和前文aes()中的color=species中的内容匹配出来
如果没有写映射,那么scale_color_manual代码将不会执行,但也不会报warning或error,但是代码不报错,不代表真的没错,图片有歧义也是一种错误
相应的shape_manual以及fill_manual都需要在aes()里写上对应的映射,也有对应的scale_shape_manual和scale_fill_manual函数来调整映射的对象
类似的调色功能用RcolorBrewer实现时代码为:
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
scale_color_brewer(palette = 'Set1')
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species),
shape = 17) #17号,实心的例子
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species),
shape = 2) #2号,空心的例子
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length),
shape = 24,
color='red',
fill='yellow') #手动设置fill和color
一个geom_xxx()函数画出来的所有东西就得到一个几何对象,也就是一个图层,多个几何对象可以叠加,先写的函数在最底层
ggplot(data = iris) +
geom_smooth(mapping = aes(x = Sepal.Length,
y = Petal.Length))+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length))
对于多个几何对象的情况,可以用如下方式简单写
ggplot(data = iris,mapping = aes(x = Sepal.Length,
y = Petal.Length))+
geom_smooth()+
geom_point()
也就是相同的内容都写在ggplot()里,是全局设置,对所有图层有效
而对于仅写在geom_xxx()里的设置,是局部设置,仅对单个geom_xxx()的图层有效
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_point()
此时散点图的点都集中在一条线上,重复叠加在一起,不能看清实际的样本数
两种操作方法:在geom_xxx()中增加position = "jitter"的参数,或者选用geom_jitter()代替geom_point()函数
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
#geom_point(position = "jitter")
geom_jitter()
横纵轴替换的函数:coord_flip()
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_jitter()+
coord_flip()
theme_xx()系列函数
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_jitter()+
theme_bw()#去掉灰格子的空白底
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_jitter()+
theme_classic()#经典全白底
这个包就是审美升级的ggplot2,ggpubr能干的调调参数ggplot2也能干
此外差异在于这个包的画图函数逻辑和base包更像,想调整啥就直接改绘图包的参数
library(ggpubr)
p = ggboxplot(iris, x = "Species", y = "Sepal.Length",
color = "Species", shape = "Species",add = "jitter")
p
下面展示的是一个特别适合ggpubr包作的箱线图的比较运算和加标记,ggplot2也能加,差别只是ggpurb的合适+好看
library(ggpubr)
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,
aes(label = after_stat(p.signif)))
除了Plots的Export之外的图片保存方法
但是存的时候都是按照Plots画板展示的比例存哦~
已经在右下角画板里展示的的,就ggsave('文件名'),注意要写上文件名后缀,如jpeg、png等
右下角画板没有的,可以ggsave(p,filename = "iris_box_ggpubr.png"):
1.保存的函数及文件名,如pdf('test.pdf')、jpeg('test.jpeg'),注意文件的后缀名和函数必须一致
2.写作图代码,注意基础包画图,不同的函数连接不需要加“+”
3.dev.off()
可以导出为ppt格式,打开相应的ppt时可右键取消组合,就可以对各个元素进行修改
注意:
1.超多点的图或超多行列的热图不适用,ppt会卡掉
2.导出R语言之后的操作无法用代码复现,因此修改的细节一旦需要回炉工作量巨大
往往是因为画板被占用
1.dev.off()——关闭画板
多次运行dev.off(),到null device,或报错(说明画板已经关上)
2.采用dev.new()新建画板,抛弃原来的画板
3.重启R studio
总之到重新运行代码能出图
1.好看的配色R包:RcolorBrewer以及paletter
2.方便的拼图R包:patchwork
library(ggplot2)
ggplot(data = iris,mapping = aes(x=Species,y=Sepal.Width))+
geom_violin(aes(fill=Species),color='yellow')+
geom_boxplot(color='green')+
geom_jitter(aes(shape=Species,color=Species))+
coord_flip()+
theme_bw()+
scale_fill_manual(values = c('#C4B4F5','#F8E6FF','#E5B8CD'))+
scale_shape_manual(values = c(1,3,5))
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。