2021-03-08 R语言作图

复习:

文件读取

认识csv格式

1.直接打开:切记要显示“.csv”后缀


image.png
  1. 记事本打开


    image.png
  2. sublime(适合大文件): 是一个打开纯文本的编辑器


    image.png
  3. R语言读取


    image.png

变量名来去自如,文件名不可以单独运行;
../表示上一级;
表格文件读入到R语言里,就是一个数据框,对数据框进行的修改不会同步到表格文件;
不要覆盖源文件;
所有代码保证可以追根溯源;

认识分隔符

, 空格 tab

将表格读入R语言里,成为数据框

read. table() 通常读取txt格式文件
read. csv() 通常读取csv格式文件
Tip:如果读取失败,手动指定参数

将数据框导出,成为表格文件

write.table(变量名, file = "导出文件名")
write.csv(变量名, file = "导出文件名")

函数相当于动词,括号里相当于名词

Rdata

R特有的数据存储格式,其他软件无法打开;
保存的是变量,非表格文件,不涉及赋值;
整存整取:带着变量名和内容一起存取;
save(变量名, file = "导出文件名")保存;
load(变量名, file = "导出文件名")加载;
这样写是错误的:


image.png

x等于变量的名字组成的向量,而不是变量组成的列表

Tip:正确找到文件

  1. 文件要放在工作目录下
  2. 用tab自动补齐保证拼写正确
  3. 列名要识别正确:header = TRUE
  4. 行名要识别正确:row.names = 1

R作图

作图分三类

1.基础包 略显陈旧 了解即可

plot(iris[,1],iris[,3],col = iris[,5]) # plot是高级绘图函数
text(6.5,4, labels = 'hello') # text是低级绘图函数, lables是形式参数
boxplot(iris[,1]~iris[,5])
dev.off()# 关闭画板
image.png

image.png

低级没办法单独绘图,而高级可以,低级在高级上面添砖加瓦

2.ggplot2 中坚力量 好好学

test = iris
if(!require(ggplot2))install.packages('ggplot2')
library(ggplot2)
ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length,
                           color = Species))

3.ggpubr 江湖救急 ggplot2简化和美化 褒贬不一

if(!require(ggpubr))install.packages('ggpubr')
library(ggpubr)
ggscatter(iris,
          x="Sepal.Length",
          y="Petal.Length",
          color="Species") #按照哪一列来分配颜色

[STHDA美图中心] (www.sthda.com )

ggplot2: 002_ggplot2.R

1.入门级模板

ggplot(data =<DATA>)+
  geom_<function>(mapping = aes(<MAPPINGS>))
ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length))#点图; 作图数据、横纵坐标

2. 属性设置

2.1手动设置

color: 仅能设置一种颜色
size: 大小单位是mm
shape: 24个数字


image.png
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue") # color = "blue"属于geom_point的参数,是具体的颜色,要加引号;不能放在ase里面,否则会被识别为数据来分配为默认的红色
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), 
             size = 5,     # 点的大小5mm
             alpha = 0.5,  # 透明度 50%
             shape = 8)  # 点的形状;或者 shape = "*"也可以

缺点:局限性大,没办法根据数据设置成不同的颜色

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

ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,
                           y = Petal.Length, # 注意x, y 没有引号
                           color = Species)) # 注意color = Species在aes函数的括号内,属于aes的参数,是列名

Ps: aes,即映射

映射:领导思维,不是必须说具体用哪几种颜色,只说按照某列分配颜色
手动设置:把所有内容设置为同一个颜色,直接指定哪个颜色

Tip: 1.自行指定映射具体颜色

ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))+
  scale_color_manual(values = c("blue","grey","red")) #关键代码在这里,领导管的太多啦,员工说的不算还必须自己再指定下; "blue"可以由"十六进制颜色码"替换,一定要加引号;color可替换为shape、fill...

Tip2: 颜色有哪些
[十六进制颜色码转换成RGB颜色值] (https://www.sioe.cn/yingyong/yanse-rgb-16/)
Tip3: 区分color和fill两个属性
color设置空心形状和实行形状:
只能有一种颜色,要么空心、要么实心,统一用color,不能fill:

ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length, color = Species),
             shape = 17) #17号,实心的例子
ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length, color = Species),
             shape = 2) #2号,空心的例子

需要边框和内心颜色不同,同时要有color和fill两个参数:

ggplot(data = test)+
  geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),
             shape = 24,
             fill = "black") #22号,双色的例子

2.3 分面 facet_wrap(~xxx)

优势:一张图分成多张子图,省掉分开作图拼图的步骤。
分面的列的标准是:改列得有重复值,并且重复值的数量不能太多。

ggplot(data = test) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + 
  facet_wrap(~ Species)  #按照Species来分面

双分面: facet_grid(xxx~xxx) ,既有重复值,重复值又有限

test$Group = sample(letters[1:5],150,replace = T) #把abcde随机抽样,抽取150个,replace表示可放回
ggplot(data = test) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) + 
  facet_grid(Group ~ Species) #按照Group来分行,按照Species来分列

小技巧:
查看内置数据集的三种方式

  • view(mpg)
  • test = mpg
  • mpg
    -- tibble
    -- with more 表示另外,更多
library(ggplot2) # 一定要先加载ggplot2
mpg #运行一下才能看到内置数据集
length(unique(mpg$manufacturer))#查看某列有多少种取值
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = class)) #因为color是字符型变量,颜色之间是独立的
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = displ)) #因为displ是字符型变量,颜色是渐变的

小技巧:
[配色R包]-RColorbroeer]{https://www.cnblogs.com/shaocf/p/9600340.html}

2.4 几何对象

即geom函数画出的所有图形,统称为一个图层(对象)。

几何对象可以叠加
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() #全局设置,对所有图层有效

图层概念:geom_xxx()画出的单个几何对象
小问题:当局部设置和全局设置冲突,谁说了算?

ggplot(test,aes(x = Sepal.Length,y = Petal.Length,color = Species)) +
  geom_point()+
  geom_smooth(color = "black") #皇后斗不过贵妃;强龙打不过地头蛇;局部设置为准

2.5 统计变化

小知识
geom_xxx函数是几何对象函数——画xxx图
stat_xxx函数是统计函数——展示xxx统计结果
使用场景1:利用表中数据直接作图,不统计

ggplot(data = fre) +
  geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity")# 加了stat = "identity"才可以写y = Frep

使用场景2:不统计count,统计比例prop

ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))#group = 1把所有数据但过一个整体,计算部分占整体的比例
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, y = ..prop..),group = 1) #没有group = 1是错误写法,这样就把每组作为1,图是五个值为1的大柱子

不是所有的事情都符合常理,也没必要

2.6 (点)位置关系

2.6.1 抖动的点图
错误写法:

ggplot(data = mpg, mapping = aes(x = class,   y = hwy, group = class)) + 
  geom_boxplot()+
  geom_point() #错误的,点都重合在一起了

正确写法:

ggplot(data = mpg,mapping = aes(x = class, y = hwy, group = class)) + 
  geom_boxplot()+
  geom_jitter()

补充dotplot,点不重合,也不奔放

ggplot(data = mpg,mapping = aes(x = class,  y = hwy, group = class)) + 
  geom_boxplot()+
  geom_dotplot(binaxis = "y",binwidth = .5,stackdir = "center")
  1. 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 坐标系

2.7.1 翻转coord_flip()

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + 
  geom_boxplot() +
  coord_flip()

2.7.2 极坐标系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

小练习:重点看备注部分

library(ggplot2)
test = iris
ggplot(data = test,aes(Sepal.Width, Species))+ #注意结尾用+连接,表示用加号连接的代码都是在画同一张图;连接分先后顺序,谁在图层下面先写谁
  geom_violin(aes(fill = Species))+ #注意要加aes,以映射的方式添加图形参数
  geom_boxplot()+#不要设置aes(color = Species),否则二分位线和四分位线颜色和背景一样不能区分,虽然不报错,但图是错的
  geom_point()+ #同上
  geom_jitter(aes(fill = Species)) #注意要加aes,以映射的方式添加图形参数
#或者
ggplot(data = test,aes(Species,Sepal.Width))+
  geom_violin(aes(fill = Species))+ #注意要加aes,以映射的方式添加图形参数
  geom_boxplot()+
  geom_point()+
  geom_jitter(aes(fill = Species))+ #注意要加aes,以映射的方式添加图形参数
  coord_flip() #反转坐标系

ggppubr: 代码在02-plots_003-ggpubr.R

  • 颜值与简约;
  • 代码少 ;
  • 语法少;
  • 生于ggplot2 美于ggplot2
  • 去掉图层、映射概念;
  • 图例细节仍要参考ggplot2;
  • 区别在默认参数;
  • 属于ggplot2扩展包;
  • 可以赋值
  • ggpubr 搜代码直接用,基本不需要系统学习
    Tip: sthda上有大量ggpubr出的图
    示例代码如下:
library(ggpubr)
ggscatter(iris,x="Sepal.Length", y="Petal.Length", color="Species")

代码说明(目前只有这一个功能ggplot2不能替代):

library(ggpubr)
ggscatter(iris,x="Sepal.Length",y="Petal.Length",color="Species")
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添加两两比较的P值
stat_compare_means(label.y = 9) #label.y = 9表示总体P值所在的纵坐标的位置

图片的保存和导出:代码在02-plots_004_图片的保存和导出.R

图片保存的三种方法

1.基础包作图的保存

通用:三段论

  • 保存的格式及文件名
  • 作图代码
  • 关闭作图
pdf("iris_box_ggpubr.pdf") #注意函数和后缀一一对应
boxplot(iris[,1]~iris[,5])
text(6.5,4, labels = 'hello')
dev.off()

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")

3.eoffice包导出为ppt,全部元素都是可编辑模式

library(eoffice)
topptx(p,"iris_box_ggpubr.pptx") #注意函数和后缀一一对应;打开PPT可以取消组合,去除背景板;不到投稿时候不要做手动设置

另外一个导出的R包:export()

拼图

[]{https://mp.weixin.qq.com/s/p7LLLvzR5LPgHhuRGhYQBQ}
ggplot2添加主题

  • theme_bw()
  • theme_classic()

debug:代码可以运行但是不出图,因为画板被占用
运行dev.off()直到出现null device为止,再运行出图代码或者新建一个画板dev.cew();如果还不行,那就重启session,重启Rstudio,或者重启电脑。
[画图合集]{https://www.jianshu.com/nb/35523479}

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

推荐阅读更多精彩内容