R:作图

常用可视化R包

image.png

*加粗为重点掌握

1. 作图

1.1 基础包:略显陈旧,了解一下

(1) 绘图函数

高级绘图函数
plot() #散点图等多种图形,根据数据分类,调用相应函数绘图
hist() #频率直方图
boxplot() #箱线图
stripchart() #点图
barplot() #柱状图
dotplot() #饼图
piechart()  #点图
matplot() #数学图形
低级绘图函数
lines() #添加线
curve() #添加曲线
abline() #添加给定斜率的线
points() #添加点
segments() #折线
arrows() #箭头
axis() #坐标轴
box() #外框
title() #标题
text() #文字
mtext() #图边文字
绘图参数
image.png

(2)举例

plot(iris[,1],iris[,3],col = iris[,5]) 
text(6.5,4, labels = 'hello')
image.png

同样数据,ggplot、ggpubr输出区别


image.png

image.png
dev.off() #关闭画板

1.2 ggplot2:中坚力量,学起来有点难

(1)入门级绘图模板:作图数据,横纵坐标

ggplot(data = <DATA>)+
  <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
#模板
ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length))

(2)属性设置(颜色、大小、透明度、点的形状,线型等)

  • color(外框颜色)&fill(填充颜色)
    R色卡:https://evvail.com/2020/02/01/477.html
    RColorBrewer://www.greatytc.com/p/194765c8c17e
    可以输入颜色名称、16色、字符串(颜色名称or16进制颜色代码需加引号,按列映射直接输入列名可不加引号)
  • size:自动单位mm
  • alpha:透明度,0.5代表50%
  • shape:形状


    image.png
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), 
             color = "blue") #手动设置,要加引号
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), 
             size = 5,     # 点的大小5mm,单位自带mm
             alpha = 0.5,  # 透明度 50%
             shape = 8)  # 点的形状,自带体系

1.3 映射:按照数据框的某一列来定义图的某个属性

  • 映射:领导思维,只说按照某列分配颜色,不必说具体是哪几种颜色
  • 手动设置:把所有的点设置为同一个颜色,直接指定是哪个颜色
ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species)) #aes参数,列名,颜色自动设置,不加引号
aes_string(x = ,y = )
#字符转变为映射
自行指定映射的具体颜色
ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))+ 
  scale_color_manual(values = c("blue","grey","red"))
区分color和fill两个属性
  • 空心形状和实心形状都用color设置颜色
  • 既有边框又有内心的,才需要color和fill两个参数
  • color管边框,fill管实心

1.4 分面

单分面
ggplot(data = test) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + 
  facet_wrap(~ Species)  #用species来分面
image.png
双分面
test$Group = sample(letters[1:5],150,replace = T)
ggplot(data = test) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + 
  facet_grid(Group ~ Species) #用species和group来分图
image.png
循环中存储多个图形
  • 可以建立列表,将图形存储在列表里
  • 再用patchwork中wrap_plots进行图片分割
1.5 几何对象
局部设置和全局设置
#局部设置
ggplot(data = test) + 
  geom_smooth(mapping = aes(x = Sepal.Length, 
                          y = Petal.Length))+
  geom_point(mapping = aes(x = Sepal.Length, 
                           y = Petal.Length))
#全局设置
ggplot(data = test,mapping = aes(x = Sepal.Length, y = Petal.Length))+
  geom_smooth()+
  geom_point()
  • 局部映射:仅对当前图层有效,单独函数后aes()
  • 全局映射:对所有图层有效
  • 当局部设置和全局设置冲突,按局部设置结果运行

2.6 统计变换-直方图

ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut))
ggplot(data = diamonds) + 
  stat_count(mapping = aes(x = cut))
image.png
  • geom_开头的函数是几何对象函数
  • stat_开头函数是统计函数
不统计,数据直接做图
ggplot(data = fre) +
  geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity")
#只有写stat=identity才会不统计
不统计count,统计prop
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))
#group=1是把所有对象作为一个组
image.png

1.7 位置关系

抖动的点图
ggplot(data = mpg,mapping = aes(x = class, 
                                y = hwy,
                                group = class)) + 
  geom_boxplot()+
  geom_point()
image.png
ggplot(data = mpg,mapping = aes(x = class, 
                                y = hwy,
                                group = class)) + 
  geom_boxplot()+
  geom_jitter()
#jitter可以让点不重合
image.png
ggplot(data = mpg,mapping = aes(x = class, 
                                y = hwy,
                                group = class)) + 
  geom_boxplot()+
  geom_dotplot(binaxis = "y",binwidth = .5,stackdir = "center")
#dotplot散点很整齐,点不重合,也不奔放
image.png
直方图
  • 叠放直方图
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut,fill=clarity))
image.png
  • 并列直方图
    position = "dodge"
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
image.png

1.8 坐标系

  • 翻转坐标系,类似转置:coord_flip()
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + 
  geom_boxplot() +
  coord_flip()
image.png
  • 极坐标系:coord_polar()
bar <- ggplot(data = diamonds) + 
  geom_bar(
    mapping = aes(x = cut, fill = cut), 
    show.legend = FALSE,
    width = 1
  ) + 
  theme(aspect.ratio = 1) +
  labs(x = NULL, y = NULL)
bar + coord_flip()
bar + coord_polar()
image.png

完整绘图模板

ggplot(data = <DATA>)+
  <geom_function>( #绘图函数
    mapping = aes(<MAPPINGS>), #x、y坐标
    stat = <STAT> #直方图中若需手动y坐标
    position = <POSITION>
  )+
  <COORDINATE_FUNCTION>+ #极坐标
  <FACET_FUNCTION> #单分面、双分面

1.3 ggpubr:江湖救急,ggplot2简化和美化,褒贬不一

  • ggpubr 搜代码直接用,基本不需要系统学习
  • 基础包不可以赋值,ggpubr图可以赋值
  • sthda有大量ggpubr出的图:www.sthda.com
  • 不可替代功能:comparisons(比较两组之间)
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)+ # Add pairwise comparisons p-value
  stat_compare_means(label.y = 9) 
image.png

图片的保存和导出

1.基础包

pdf("iris_box_ggpubr.pdf")
#保存格式及文件名格式一一对应

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")
#ggplot2可以赋值

3.eoffice包

  • 导出为ppt,全部元素都是可编辑模式
topptx(p,"iris_box_ggpubr.pptx")

拼图

大佬包patchwork
https://mp.weixin.qq.com/s/p7LLLvzR5LPgHhuRGhYQBQ

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • 复习: 文件读取 认识csv格式 1.直接打开:切记要显示“.csv”后缀 记事本打开image.png subl...
    乔帮主_d2ac阅读 574评论 0 2
  • 图就是数据,数据就是图 常见可视化R包 1. 作图 base 略显陈旧 了解一下 ggplot2 中坚力量 学起来...
    Tina_e4a6阅读 1,281评论 0 8
  • 1.常用可视化R包 作图baseggplot2ggpubr 拼图par里mfrowgrid.arragecowpl...
    不到7不改名阅读 608评论 0 3
  • 常用绘图R包 1.基础包 略显陈旧 了解一下 2.ggplot2 中坚力量 学起来有点难 3.ggpubr 江湖救...
    CyberPlanet阅读 367评论 0 3
  • 作者:严涛浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源 ggplot2学习笔记之图...
    wanghaihua888阅读 2,622评论 0 6