ggplot2
是R中用来作图的很强的包,但是其用法比较多且各种参数比较复杂,我自己使用的时候还经常需要查阅一些关键参数等,因此想要写一个r
中ggplot2
的作图文档,方便自己查阅。
但是今天突然发现了一个网站,这个网站里面包含了ggplot2
作图的几乎所有内容。有各种图的制作,参数的说明,图的图例的调整等;而且还赋上了代码以及跟参数的使用说明,可以说十分的详细, 以后可以专门对它做个介绍。这个网站的地址是:The R Graph Gallery
今天主要介绍ggplot2
的图修改,以及部分常见的问题,后续会一直更新的。
1. theme函数实现图的全局修改
- 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。
- 整幅图的主题设置
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
对离散型坐标轴随意设置坐标轴先后。
-
- 数字型连续向量只能从大到小或者从小到大排列,不能改变顺序, 可以变为字符类型(as.character())----再排序
-
- 只有字符串类型才可以改变坐标轴刻度的顺序
# 根据实际图的坐标上的内容来进行排序
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. 实现一页多图
cowplot
和patchwork
和ggpubr
, 可以通过??
+函数名来查找更详细的参数设置
## 构造数据和图
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以及前后端的知识。今天又创建了一个公众号,接下来的几年会再接再厉,继续分享一些技术性的文档,另外还会分享一些写作方面和生活方面的文档,十分谢谢大家的关注。
文章来源:https://www.toymoban.com/news/detail-648197.html
声明: 文章部分引用自其他文章,如有侵权,请联系删除。文章来源地址https://www.toymoban.com/news/detail-648197.html
到了这里,关于R语言画图的-- ggplot2(实现图例的精细修改)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!