前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言作图

R语言作图

原创
作者头像
大胖橘
发布2023-03-14 10:53:24
1.5K0
发布2023-03-14 10:53:24
举报
文章被收录于专栏:R语言 / LinuxR语言 / Linux

作图

代码语言: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. 套代码、调细节

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档