R语言画图的-- ggplot2(实现图的精细修改)

ggplot2是R中用来作图的很强的包,但是其用法比较多且各种参数比较复杂,我自己使用的时候还经常需要查阅一些关键参数等,因此想要写一个rggplot2的作图文档,方便自己查阅。

但是今天突然发现了一个网站,这个网站里面包含了ggplot2作图的几乎所有内容。有各种图的制作,参数的说明,图的图例的调整等;而且还赋上了代码以及跟参数的使用说明,可以说十分的详细, 以后可以专门对它做个介绍。这个网站的地址是:The R Graph Gallery

今天主要介绍ggplot2的图修改,以及部分常见的问题,后续会一直更新的。

1. theme函数实现图的全局修改
  1. theme函数中的位置详解图, 其主要分为5个元素 : (整幅图的(plot),坐标轴的(axis),图例的(legend),面板的(panel)和分面元素(facet))
    此处文章引自–链接: link

在这里插入图片描述
用法:
theme函数其实很简单:
theme(主题.部件=element_类型())
主题:plot, axis, legend, panel, facet
部件:title(名字,坐标轴名字), line(线,坐标轴的xy轴), text(标签,坐标轴刻度的数字), ticks(坐标轴刻度的小线条), background(背景)等
类型:rect,line,text
说明:部件要和类型一致。比如,部件为title,text等文字相关的元素,那么类型处就为text。

  1. 整幅图的主题设置
library(tidyverse)
head(mtcars)

p1=ggplot(mtcars,aes(mpg,disp))+geom_point()
p2=ggplot(mtcars,aes(mpg,disp,color=cyl))+geom_point()


#1.整幅图的主题设置
p1+labs(title="xyz")+theme(
  plot.background = element_rect(fill = "green", color = "lightgreen", size = 10),
  plot.title = element_text(hjust = 1, color = "red", face = "italic"),
  plot.margin = margin(t = 30, r = 30, b = 30, l = 30, unit = "pt")
)

#2.坐标轴主题设置
p1+theme(
 axis.line = element_line(color = "green", size = 2),
 axis.ticks = element_line(color = "red", size = 3),
 axis.title = element_text(color = "grey", face = "italic"),
 axis.text = element_text(color = "pink"),
 axis.text.x = element_text(angle = 45, hjust = 1)
)

#3.面板元素设置
p1+ theme(
 panel.background = element_rect(fill = "pink", color = "blue"),
 panel.grid = element_line(color = "grey80", size = 0.5)
)

#4.图例设置
p2+theme(
 legend.background = element_rect(fill = "grey"),
 legend.title = element_text(color = "green", size = 10),
 legend.key = element_rect(fill = "black"),
 legend.text = element_text(color = "red"),
 legend.margin = margin(t = 20, r = 10, b = 10, l = 10, unit = "pt"),
 legend.position = "top"
)


#5 图的自动输出
# ggsave 保存pdf
ggsave("df3a.pdf")

# export中graph2ppt 保存ppt给格式
library(export)
graph2ppt(file = "df3a.ppt", append=T)



2. 图的精确修改

例子:

# 先搞一个图出来
rm(list = ls())
data=data.frame(data_c=1:10,data_i=1:10)

library(ggplot2)
p = ggplot(data,aes(x=s1,y=s2,size=s2))+geom_point()

在图p中修改属性, 下面几乎包含图的精细修改的所有部分, 其他不太常用:


  p+
  # 添加背景
  theme_bw()+

  # 添加title和x轴,y轴的名称
  # legend包含colour和shape的因子,就可以使用者两个参数来调节其名字
  # fill 更改legend的title
  labs(title='xxxx',y="xxxx",x="xxxx", colour = "xxxx",shape = "xxxx", fill='xxxxx')+
  
  # 调节title的位置和字体大小
  theme(plot.title=element_text(hjust=0.5,size = 20))+
  
  # 调节纵坐标轴的刻度字母大小
  theme(axis.text.y = element_text(size = 20))+
  # 调节横坐标轴的刻度字母大小
  theme(axis.text.x = element_text(size = 20))+
  
  # 调节纵坐标的title的大小
  theme(axis.title.y = element_text(size = 20))+
  # 调节横坐标的title的大小
  theme(axis.title.x = element_text(size = 20))+
  
  # 调节legend的大小(包含title 和内容)
  theme(legend.text=element_text(size=15))+
  theme(legend.title =element_text(size=20))+
  
  # 坐标轴刻度字条旋转角度
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +

  # 改变横纵坐标的值
  scale_x_continuous(breaks=1:10,labels=1:10)+
  # 改变横纵坐标上刻度的排列方向
  scale_x_reverse()+
  
  # 调节y轴的长度
  ylim(0,100)+ 
  #调节x轴的长度
  xlim(0.7, 1.0)+
  
3. 其他修改
1. 坐标轴的排序:

我们可以通过scale_x_discrete中的limits对离散型坐标轴随意设置坐标轴先后。

    1. 数字型连续向量只能从大到小或者从小到大排列,不能改变顺序, 可以变为字符类型(as.character())----再排序
    1. 只有字符串类型才可以改变坐标轴刻度的顺序
# 根据实际图的坐标上的内容来进行排序
p+scale_x_discrete(limits=as.character(c(1,2,10,3,5,6,7,4,8,9)))


# 或者
# 将数据转换为字符类型,然后转换为factor因子,然后排序, 最后直接画图就好了
data$data_c=as.character(data$data_c)
data$data_c=factor(data$data_c,levels =c(1,2,10,3,5,6,7,4,8,9))    # factor设置level来设置先后顺序


2. 实现一页多图

cowplotpatchworkggpubr, 可以通过??+函数名来查找更详细的参数设置

## 构造数据和图
x<-c(1:5)
y<-x
xy<-data.frame(x,y)
a <- ggplot(xy,aes(x,y))+geom_point()+theme_few()
b <- ggplot(xy,aes(x,y))+geom_point()+ theme_calc()
c<-ggplot(xy,aes(x,y))+geom_point()


## 方法一
library(cowplot)
cowplot::plot_grid(a,b,c)   #直接绘图
cowplot::plot_grid(a,b,c,nrow=2,labels = c('one', 'two', 'three'),
                   label_size = 20,rel_widths = c(1,2),rel_heights = c(2,1))# 调整一些图的比列,label问提



## 方法二
install.packages("patchwork")
library(patchwork)
a+b+c   
a/(b+c)   # a图在第一行,  b,c图在第二行


## 方法三
install.packages("ggpubr")
library(ggpubr)
ggarrange(a,b,c)
4. 具体作图中的参数修改(某些特殊的参数)
柱状图的参数修改

position参数的设置

  • stack:堆叠图
  • fill:填满纵坐标轴
  • dodge:堆叠改为并排
数据准备:
   cluster      variable value
1        I genome.number    50
2      III genome.number     7
3       IV genome.number     2
4      XIa genome.number     1
5     XIVa genome.number    13
6     XIVb genome.number     3
7      XVI genome.number     1
8        I   bins_number    65
9      III   bins_number     0
10      IV   bins_number    41
11     XIa   bins_number     0
12    XIVa   bins_number   104
13    XIVb   bins_number     0
14     XVI   bins_number    59

#1, 展示stack
ggplot(data, aes(x=cluster,y=value,fill=variable))+
  geom_bar(stat = "identity", position = "stack")
#2 展示fill
ggplot(data, aes(x=cluster,y=value,fill=variable))+
  geom_bar(stat = "identity", position = "fill")

#3 展示dodge
ggplot(data, aes(x=cluster,y=value,fill=variable))+
  geom_bar(stat = "identity", position = "dodge")

图示1 展示stack:
在这里插入图片描述
图示2,展示fill
在这里插入图片描述
图示3,展示dodge
在这里插入图片描述

写在最后

作为一个科研小渣渣,科研时间勉强又续费了4年。3年前,创建了CSDN账号,一直在分享一些技术方面的东西,包括python, r以及前后端的知识。今天又创建了一个公众号,接下来的几年会再接再厉,继续分享一些技术性的文档,另外还会分享一些写作方面和生活方面的文档,十分谢谢大家的关注。
在这里插入图片描述

声明: 文章部分引用自其他文章,如有侵权,请联系删除。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值