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

R语言作图基础20230206

原创
作者头像
顾卿岚
发布2023-02-08 16:55:47
1.4K0
发布2023-02-08 16:55:47
举报
文章被收录于专栏:生物信息学习笔记

一、常用的可视化包

1)作图包

base:

ggplot2:

ggpubr:

2)拼图包

par里面的mfrow

grid.arrange

cowplot

customLayout

patchwork

二、基础包绘图函数

ps:高级绘图函数是指可以绘制出一张图,而低价绘图函数是指在图中添加的“零部件”,低级绘图函数必须在高级绘图函数的基础上才能绘制,二者都是base包的内容

eg:plot绘图

代码语言:javascript
复制
> plot(iris[,1],iris[,3],col=iris[,5])
 #以iris表格第一列作为x轴,第三列作为y轴,根据品种来绘制不同颜色
> text(6.5,4,label="hello") #添加文字,并加上坐标

三、ggplot2绘图(最常用的绘图R包)

⚠️⚠️首先必须 library(ggplot2)

1)入门:映射

代码语言:javascript
复制
> ggplot(data = iris)+
      geom_point(mapping = aes(x = Sepal.Length,
 y = Petal.Length))

1⃣️ggplot是绘制整个画板,data是用于画图的数据

2⃣️geom_point是绘制点图

3⃣️mapping=aes() 开始映射,即x轴的数据是Sepal.Length,y轴数据Petal.Length,不需要加引号

(以上代码的数据的映射放在了具体的geom_point函数中,如果整体映射是一致的,可以把映射放到ggplot()中,这样子如果没有特殊情况,后面的绘图函数不需要重新映射,但是如果映射在geom_开头的函数中,每一个函数都需要重新映射)

例如:

代码语言:javascript
复制
> ggplot(data=iris,mapping = aes(x = Sepal.Length,y = Petal.Length))+geom_point()

以上两种代码的写法,最后画出的图是一致的!!

2)手动设置相关属性

代码语言:javascript
复制
>ggplot(data = iris) + 
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length), 
 
                                                             size = 5,     # 点的大小5mm
   
                                                            alpha = 0.5,  # 透明度 50%
             
                                                            shape = 8,   #点的形状
            
                                                             color="blue") #颜色设置

shape=.  不同的数字代表不同点点的形状
shape=. 不同的数字代表不同点点的形状

3)通过映射来定义图的某个属性

代码语言:javascript
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
 color = Species))

对Species也进行映射,因此不同分组出现了不同的颜色,当然这部分颜色是默认的
对Species也进行映射,因此不同分组出现了不同的颜色,当然这部分颜色是默认的

Q1:‼️‼️如何指定映射的颜色 scale_color_manual(values= )函数

代码语言:javascript
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
  y = Petal.Length,
 color = Species))
+
 scale_color_manual(values = c("blue","grey","red"))

代码中颜色顺序和映射是一一对应的,可以通过改变代码中颜色顺序来调整分组的颜色
代码中颜色顺序和映射是一一对应的,可以通过改变代码中颜色顺序来调整分组的颜色

总结:映射可以根据某一列的内容分配颜色,手动设置是把图像设置为一个或多个颜色,与数据无关。

Q2:‼️‼️区分fill 和color两种属性

1)空心和实心的形状用color设置即可,因为只有一个颜色

2)有两种颜色的形状,color设置边框、fill设置填充

代码语言:javascript
复制
ggplot(data = iris)+
  geom_point(mapping = aes(x = Sepal.Length,
  y = Petal.Length,
 color = Species),
 
                         shape = 24,fill = "black") 

边框的color是映射的,内部颜色由fill决定
边框的color是映射的,内部颜色由fill决定

4)分面(根据分组绘出多个图)facet_wrap( )

代码语言:javascript
复制
ggplot(data = iris) +  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length,color=Species))  
                    + facet_wrap(~ Species)

这个数据三个分组可以分三个图
这个数据三个分组可以分三个图

5)双分面(把行也分组)

代码语言:javascript
复制
>dat = iris
 
>dat$Group = sample(letters[1:5],150,replace = T)
 #不要更改内置数据集,可以把数据集赋值后修改
>ggplot(data = dat) + 
  geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) 
+ 
  facet_grid(Group ~ Species)
第二行代码的意思是在dat数据集增加一列Group,随机命名为a~e中一个,便形成了五个分组
第二行代码的意思是在dat数据集增加一列Group,随机命名为a~e中一个,便形成了五个分组

6)几何对象(可以叠加使用)

ggplot() 的映射可以在全局使用,geom_function的映射只能在局部使用

7)柱状图/直方图 (y轴无需映射)

代码语言:javascript
复制
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut)) #常用于统计个数,y轴会根据x轴自动计算
#默认geom_bar不用映射y,如果要映射加stat = "identity"
#默认geom_bar不用映射y,如果要映射加stat = "identity"

也可以把count改成prop,计算百分比

代码语言:javascript
复制
>ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

8)位置关系

a)点图设置

代码语言:javascript
复制
>ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width,
 fill = Species)) 
     + 
  geom_boxplot()+
  geom_point()
使用geom_point() 发现点都在一条直线上,可能是不显示其他位置,只显示一条线
使用geom_point() 发现点都在一条直线上,可能是不显示其他位置,只显示一条线
代码语言:javascript
复制
ggplot(data = iris,mapping = aes(x = Species, 
y = Sepal.Width,
fill = Species)) 
     + 
  geom_boxplot()+
  geom_jitter()
使用geom_jitter()绘制点图,可以把点都画出来
使用geom_jitter()绘制点图,可以把点都画出来

b)堆叠直方图

代码语言:javascript
复制
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut,fill=clarity))
y轴是自动计数,不需要映射
y轴是自动计数,不需要映射

c)并列直方图

代码语言:javascript
复制
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
添加position = "dodge"参数,把刚刚的堆叠直方图的堆叠部分单独变成一个柱子
添加position = "dodge"参数,把刚刚的堆叠直方图的堆叠部分单独变成一个柱子

9)坐标系

coord_flip( ). 翻转坐标系

coord_polar( ) 极坐标系

四、ggpubr绘图

与ggplot2类似,但是不用映射

代码语言:javascript
复制
ggpubr::ggboxplot(iris,x="Species",y="Sepal.Length",color = "Species",shape="Species",add="jitter")

ps:在ggplot2用geom_jitter() ,在ggpubr用add="jitter"

五、保存文件

1)ggplpot2包

ggsave( "example.png")

ggsave(p,filename="example_2.png"). #ggsave也可以保存ggpubr画的图片

2)ggpubr包

ggexport(filename="example_3.png") #ggexport是保存ggpubr的图片 png/pdf格式都可以

3)eoffice包(输出ppt的神器)

topptx(p,"example.pptx") #输出ppt格式的图片,图中的每一个元素都是独立可移动、可编辑

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、常用的可视化包
    • 1)作图包
      • 2)拼图包
      • 二、基础包绘图函数
      • 三、ggplot2绘图(最常用的绘图R包)
        • 1)入门:映射
          • 2)手动设置相关属性
            • 3)通过映射来定义图的某个属性
              • Q1:‼️‼️如何指定映射的颜色 scale_color_manual(values= )函数
              • Q2:‼️‼️区分fill 和color两种属性
            • 4)分面(根据分组绘出多个图)facet_wrap( )
              • 5)双分面(把行也分组)
              • 6)几何对象(可以叠加使用)
              • 7)柱状图/直方图 (y轴无需映射)
              • 8)位置关系
              • 9)坐标系
          • 四、ggpubr绘图
          • 五、保存文件
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档