文章目录
- 1. 图的精确修改
- theme函数实现图的精细修改
- 实现一页多图
- 具体作图中的参数修改(某些特殊的参数)
- 柱状图的参数修改
ggplot2
是R中用来作图的很强的包,但是其用法比较大且各种参数比较复杂,我自己使用的时候还经常需要查阅一些关键参数等,因此本来想要写一个r
中ggplot2
的作图文档,方便自己查阅。
但是今天突然发现了一个网站,这个网站里面包含了ggplot2
作图的几乎所有内容。其中就包括各种图的制作,参数的说明,图的图例的调整等;而且还赋上了代码以及跟参数的使用说明,可以说十分的详细。这个网站的地址是:The R Graph Gallery。
我就简单把之前积累的一些东西发出来,后面去详细了解一下该网站,再做介绍。
1. 图的精确修改
例子:
# 先搞一个图出俩
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的因子,就可以使用者两个参数来调节其名字labs(title='xxxx',y="xxxx",x="xxxx", colour = "xxxx",shape = "xxxx")+# 调节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)+
坐标轴的排序:
我们可以通过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来设置先后顺序
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)
实现一页多图
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)
具体作图中的参数修改(某些特殊的参数)
柱状图的参数修改
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
声明: 文章部分引用自其他文章,如有侵权,请联系删除。