R语言作图

2023-03-14 10:53:24 浏览数 (1)

作图

代码语言:javascript复制
base
ggplot2  ★
ggpubr

拼图

代码语言:javascript复制
par里的mfrow
grid.arrange  
cowplot
customLayout
patchwork   ★

导出

代码语言:javascript复制
经典三段论
ggsave  ★(属于ggplot2,可以存储)
eoffice (可以导出为ppt)
ggplot2语法
  1. 入门级绘图模板 ggplot(data=<DATA>) <GEOM_FUNCTION>(mapping=aes(<MAPPINGS>)) #ggplot() 括号里面是数据 例如 ggplot(data=iris) geom_point(mapping=aes(x=Sepal.Length, y=Petal.Length) ggplot2的特殊语法:列名不加引号,行末写加号
  2. 属性设置(颜色、大小、透明度、点的形状、线型等)

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
画图的思维
  1. 数据适合用什么图展示?(翻相关文献)
  2. 搜画图代码(百度识图):代码可复制,图片美观;提供了代码配套的示例数据;示例代码 示例数据
  3. 仿制示例数据:数据类型、数据结构;组织方式、对应关系
  4. 套代码、调细节

0 人点赞