作图
代码语言:javascript复制base
ggplot2 ★
ggpubr
拼图
代码语言:javascript复制par里的mfrow
grid.arrange
cowplot
customLayout
patchwork ★
导出
代码语言:javascript复制经典三段论
ggsave ★(属于ggplot2,可以存储)
eoffice (可以导出为ppt)
ggplot2语法
- 入门级绘图模板 ggplot(data=<DATA>) <GEOM_FUNCTION>(mapping=aes(<MAPPINGS>)) #ggplot() 括号里面是数据 例如 ggplot(data=iris) geom_point(mapping=aes(x=Sepal.Length, y=Petal.Length) ggplot2的特殊语法:列名不加引号,行末写加号
- 属性设置(颜色、大小、透明度、点的形状、线型等)
2.1手动设置(与数据内容无关)
2.2映射:按照数据框的某一列来定义图的某个属性
也可自行指定映射的颜色
代码语言:javascript复制ggplot(data=iris)
geom_point(mapping=aes(x=Sepal.Length,
y=Petal.Length,
color=Species))
scale_color_manual(values=c("bule","grey","red"))
2.3 分面
代码语言:javascript复制ggplot(data = iris)
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length))
facet_wrap(~ Species)
双分面
代码语言:javascript复制dat = iris #把iris的内容传递给变量dat
dat$Group = sample(letters[1:5],150,replace = T) #dat中新增一列group,
ggplot(data = dat)
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length))
facet_grid(Group ~ Species)
用来分面的列的要求:必须有重复值,且重复值的数量是有限的。
练习题
代码语言:javascript复制load("test.Rdata")
ggplot(test)
geom_point(mapping = aes(x = a,
y = b,
color = change))
scale_color_manual(values =c("darkgreen","grey","red"))
#注意ggplot(test),不是ggplot("test.Rdata")!
文件名称和变量名称的区分:test=read.csv test是变量名称,read.csv是文件名称。文件名称出现在代码里,必须是在实际参数的位置上,带着引号出现,并且函数是能识别文件名称的函数。ggplot函数不能识别文件,只能识别变量。看环境中是否有这个变量。画图是用数据画图。
2.4 几何对象
代码语言:javascript复制#局部,每一个geom管自己的mapping,仅对当前图层有效
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()
两个代码的结果是一样的
2.5 统计变换(柱状图)
代码语言:javascript复制View(diamonds) #diamonds是内置数据
table(diamonds$cut)
ggplot(data = diamonds)
geom_bar(mapping = aes(x = cut))
ggplot(data = diamonds)
stat_count(mapping = aes(x = cut))
使用表中数据直接作图,而不统计
代码语言:javascript复制ggplot(data = fre)
geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity")
不统计count,统计比例(prop)
代码语言:javascript复制ggplot(data = diamonds)
geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))
2.6 位置关系
代码语言:javascript复制# 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 坐标系
代码语言:javascript复制#翻转coord_flip()
#极坐标系coord_polar()
总结:完整绘图模板
代码语言:javascript复制ggplot(data=<DATA>)
<GEOM_FUNCTION>(
mapping=aes(<MAPPINGS>),
stat=<STAT>,
position=<POSITON>
)
<COORDINATE_FUNTION>
<FACET_FUNTION>
ggpubr语法
代码语言:javascript复制ggscatter(iris,x="Sepal.Length",
y="Petal.Length",
color="Species")
代码语言:javascript复制#镶嵌图画法,可以赋值的,变量通常为p
p <- ggboxplot(iris, x = "Species",
y = "Sepal.Length",
color = "Species",
shape = "Species",
add = "jitter")
代码语言:javascript复制#可以做组间比较
p stat_compare_means(comparisons = my_comparisons)
stat_compare_means(label.y = 9)
图片的保存和导出
方法1:ggplot2系列
代码语言:javascript复制ggsave(p,filename = "iris_box_ggpubr.png")
或者
ggsave("文件名称.后缀")
#后缀是有意义的
方法2:三段论
代码语言:javascript复制pdf("test.pdf") #保存的格式及文件名
... #作图代码
...
dev.off() #画完了,关闭画板
方法3:eoffice
代码语言:javascript复制library(eoffice)
topptx(p,"iris_box_ggpubr.pptx") #把一张图保存为PPT
拼图
R包patchwork
语法简单,完美兼容ggplot2
画图常见的问题
代码可运行但是不出图——因为画板被运行
代码语言:javascript复制dev.off() #关闭画板,可以多次运行,直到出现null device为止,再重新运行出图代码。
搜索画图的代码网站:STHDA
画图的思维
- 数据适合用什么图展示?(翻相关文献)
- 搜画图代码(百度识图):代码可复制,图片美观;提供了代码配套的示例数据;示例代码 示例数据
- 仿制示例数据:数据类型、数据结构;组织方式、对应关系
- 套代码、调细节