导图社区 R语言可视化及绘图
这是一篇关于R语言可视化及绘图02的思维导图,包含几何对象、坐标轴自定义函数、图例与标题等内容,可收藏。
编辑于2021-09-04 23:32:45R语言可视化及绘图
8.几何对象
点图
条图
直方图、密度图
折线图
标签绘制
文本与标签添加
geom_label的文本将以标签形式出现,即文本会带有一个背景色。 geom_text则是纯文本形式展示。 annotaete函数则在图上添加一个注释图层。
文本与标签区别
p <- ggplot(mtcars,aes(wt,mpg,label=rownames(mtcars))) a <- p+geom_text() b <- p+geom_label() gridExtra::grid.arrange(a,b,ncol=2)
将散点与文本组合在一起
p+geom_point(color='dodgerblue')+ geom_text(nudge_x = 0.15, #将文本整体位置平移 angle=45) #文本倾斜
变量映射
scale_color_manual(values=c('black','white','gray'))
数学表达式添加
df <- data.frame(x=1:8,y=1.2+x^2) ggplot(df,aes(x,y))+geom_point()+ geom_smooth()+ geom_text(aes(x=4,y=40),label='y == 1.2 +x^2', parse = TRUE, size=7)
注释添加
annotate函数在图上某个位置或某区域添加注释,无需映射变量,只需指定位置。
#添加文本 a <- p+annotate("text",x=4,y=25,label='I love R', size=5,color='forestgreen') #添加矩形 b <- p+annotate('rect',xmin=3,xmax=4.2,ymin=12, ymax = 21,alpha=.2,fill='forestgreen') #线段 c <- p+annotate('segment',x=2.5,xend=4,y=15, yend=25,color='blue') #点线段 d <- p+annotate('pointrange',x=3.5,y=20,ymin=12, ymax=28,color='red',size=1.5) grid.arrange(a,b,c,d,ncol=4)
9.坐标轴自定义函数
plotrix包
语法
twoord.plot(lx,ly,rx,ry,data=NULL,main="",xlim=NULL,lylim=NULL,rylim=NULL, mar=c(5,4,4,4),lcol=1,rcol=2,xlab="",lytickpos=NA,ylab="", ylab.at=NA,rytickpos=NA,rylab="",rylab.at=NA,lpch=1,rpch=2, type="b",xtickpos=NULL,xticklab=NULL,halfwidth=0.4, axislab.cex=1,do.first=NULL,...)
参数
lx,ly,rx,ry:分别指定左坐标轴和右坐标轴的值,必须是连续的值 data:需要绘制双轴图形的数据框 main:为图形指定标题 xlim:限制横坐标值的范围 lylim,rylim:限制左右纵坐标值的范围 mar:设置图形边界距,默认值为(5,4,4,4) lcol,rcol:设置左右坐标轴的颜色,这样可以起到图例的作用 xlab:设置横坐标轴标签 lytickpos:设置左坐标轴刻度标签的位置 ylab:设置左坐标轴标签 ylab.at:设置左坐标轴标签位置 rytickpos:设置右坐标轴刻度标签的位置 rylab:设置右坐标轴标签 rylab.at:设置右坐标轴标签位置 lpch,rpch:设置左右坐标轴图形的外观 type:指定图形类型 xtickpos:设置横坐标轴刻度标签位置 xticklab:设置横坐标轴刻度标签 halfwidth:设置用户给定条形图宽度的一半 axislab.cex:设置坐标轴标签和刻度标签的大小 do.first:通过该参数可以往图形中添加背景色或网格线
10.图例与标题
图例
移除图例用 guides()
library(ggplot2) p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() p + guides(fill=FALSE)
改变图例的位置用theme(legend.position=…)
p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() +scale_fill_brewer(palette="Pastel2") #上方 p + theme(legend.position="top")#左边left,右边 right, 底部bottom
改变图例标签的顺序
p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() #使用limit参数设置图例位置 p + scale_fill_discrete(limits=c("trt1", "trt2", "ctrl")) #使用guides(fill=guide_legend(reverse=TRUE))逆转图例 p + guides(fill=guide_legend(reverse=TRUE))
设置图例的标题
#改变标题名字 用labs() p + labs(fill="Condition") # 设置图例的标题的字体、颜色、大小用theme(legend.title=element_text()) p + theme(legend.title=element_text(face="italic", family="Times", colour="red",size=14)) #移除图例标题 #增加 guides(fill=guide_legend(title=NULL))函数即可移除图例标题 ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() +guides(fill=guide_legend(title=NULL))
设置图例的标签
#改变标签的名字 p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() p + scale_fill_discrete(labels=c("Control", "Treatment 1", "Treatment 2")) #改变标签的主题 p + theme(legend.text=element_text(face="italic", family="Times", colour="red", size=14)) #多行图例标签的展示 #有时候标签名字较长,一行展示不够美观,需要多行呈现 加一个\n p + scale_fill_discrete(labels=c("Control", "Type 1\ntreatment", "Type 2\ntreatment"))
标题
main: 图形标题设置参数
plot(1:30) plot(1:30,main="图形元素设置演示")
ylab, xlab: x轴与y轴名称设置参数
plot(1:30, main="图形元素设置演示图", ylab="y轴数值", xlab="x轴数值")
sub: 子标题设置参数
plot(1:20,main="主标题",sub="子标题")
ylim, xlim: x轴与y轴数值界限设置参数
plot(1:30,xlim=c(-20,20),ylim=c(-20,20)) plot(1:30,xlim=c(-20,20),ylim=c(20,-20))
11.坐标系转换函数与图片分面函数
坐标系变换
coord_cartesian()笛卡尔坐标系
coord_cartesian(xlim = NULL, ylim = NULL, expand = TRUE, default = FALSE, clip = "on")
xlim, ylim 表示设定x轴和y轴的绘图范围,如果同时设定clip="off"则表示将不绘制在范围外的数据点,通常不进行设置,而是后期从标度中更改显示范围
expand 表示是否将扩展xlim和ylim,默认扩展以绘制可能出现在绘图范围以外的数据
default 表示是否更改默认坐标系,默认FALSE不更改,TRUE则会变成另一个坐标系
coord_fixed()修改纵横比坐标系
纵横比可以用参数ratio自定义,默认为1表示固定纵横比为1, 纵横比越大,则同样尺寸,其纵轴视觉长度越长;背景为矩形格子
coord_fixed(ratio = 1, xlim = NULL, ylim = NULL, expand = TRUE, clip = "on")
coord_flip()翻转坐标系
coord_flip(xlim = NULL, ylim = NULL, expand = TRUE, clip = "on")
翻转后横轴为y轴,纵轴为x轴
coord_polar()极坐标投影
coord_polar(theta = "x", start = 0, direction = 1, clip = "on")
theta 表示要极坐标化的中心轴,即该轴转化为圆周,另一个轴转化为半径
direction 表示排列方向,direction=1表示顺时针,direction=-1表示逆时针
start 表示起始角度,以距离12点针的弧度衡量,具体位置与direction参数有关,若direction为1则在顺时针start角度处,若direction为-1则在逆时针start角度处
coord_trans()变换笛卡尔坐标
coord_trans(x = "identity", y = "identity", limx = NULL, limy = NULL, clip = "on", xtrans, ytrans)
x,y 表示指定坐标轴比例尺变换的方式,默认identity不变化
图片分面
准备
p <- ggplot(mpg,aes(displ,cty))+geom_point()
根据cyl变量把图形分成4列
a <- p+facet_grid(.~cyl)
根据drv变量把图形分成3行
b <- p+facet_grid(drv~.)
分成12格 c <- p+facet_grid(drv~cyl)
使用scales参数释放坐标轴刻度
mt <- ggplot(mtcars,aes(mpg,wt,color=factor(cyl)))+geom_point() mt+facet_grid(.~cyl,scales = 'free')
ggplot(mpg, aes(drv, model)) + geom_point() + facet_grid(manufacturer ~ ., scales = "free", space = "free") + #用三个变量,drv,model 以及 manufacturer 进行分面 theme(strip.text.y = element_text(angle = 0))
此处space='free',表示不同分面根据自身数据调整轴取值范围
15.生存曲线
安装软件包
install.packages(c("survival","survminer"))
加载包
library("survival")library("survminer")
示例数据集 使用生存包中提供的肺癌数据
data("lung")head(lung)
计算生存曲线
fit<-survfit(Surv(time,status)~sex,data=lung)print(fit)
可视化生存曲线
使用参数conf.int = TRUE的幸存函数的95%置信限
使用期权risk.table的风险个体的数量和/或百分比
risk.table允许的值包括:
指定是否显示风险表的TRUE或FALSE。默认值是FALSE。
“绝对”或“百分比”:分别显示风险对象的绝对数量和百分比。使用“abs_pct”来显示绝对数字和百分比。
Log-Rank测试的p值使用pval = TRUE比较组
使用参数surv.median.line的中值生存中的水平/垂直线
14.nomogram和heatmap
13.venn图和火山图
韦恩图
install.packages("VennDiagram")
安装
library(VennDiagram)
A = 1:150 B = c(121:170,300:320) C = c(20:40,141:200) Length_A<-length(A) Length_B<-length(B) Length_C<-length(C) Length_AB<-length(intersect(A,B)) Length_BC<-length(intersect(B,C)) Length_AC<-length(intersect(A,C)) Length_ABC<-length(intersect(intersect(A,B),C))
生成几个集合并计算各个集合及其相互交集的大小
绘制两个集合
T<-venn.diagram(list(A=A,B=B),filename=NULL ,lwd=1,lty=2 ,col=c("red","green"),fill=c("red","green") ,cat.col=c("red","green") ,rotation.degree=90) grid.draw(T)
filename指定用于保存图形文件的文件名,如果希望在当前的图形窗口中看到绘制的韦恩图,则filename必须为空;若希望将绘制的图形直接保存为某文件,则直接使用venn.diagram(...,filename="*")即可完成。 fill表示各个集合对应的圆的填充颜色。 col表示对应的圆周的颜色,而cat.col则表示集合名称的显示颜色。 lwd用于设定圆弧的宽度,lty用于设定圆弧的线型。 rotation.degree则可用于调整图形的旋转角度。
绘制三个集合
T<-venn.diagram(list(A=A,B=B,C=C),filename=NULL ,lwd=1,lty=2,col=c("red","green","blue") ,fill=c("red","green","blue") ,cat.col=c("red","green","blue") ,reverse=TRUE) grid.draw(T)
火山图
导入数据包:library(ggplot2)
读取csv文件:data=read.table(file="c:\\",header=T,row.names=1,sep=",")
设置横轴和纵轴:r03=ggplot(data,aes(log2FoldChange,-1*log10(pvalue)))
显示火山图:r03+geom_point()
改变点的颜色
设置火山图点的颜色(只能设置一种):r03 +geom_point(aes(color ="red")) //添加标注
设置火山图点的颜色 (颜色种类由significant来确定,significant 是数据表中的一列,相当于一个tag)
r03 + geom_point(aes(color =significant)) addcolor=r03 + geom_point(aes(color =significant)) addcolor
设置坐标轴范围和标题
labs(title=“..”,x=“..”,y=“..”)
r03xy=addcolor+xlim(-4,4)+ ylim(0,30)+ labs(title="Volcanoplot",x=expression(log2(log2FoldChange)),y=expression(-log10(pvalue)))
自定义颜色 (要与指定颜色数量一致)
volcano= r03xy +scale_color_manual(values =c("green","black", "red")) volcano
添加阈值线 (y轴截距,横坐标范围)
addline=volcano+geom_hline(yintercept=1.3)+geom_vline(xintercept=c(-1,1)) addline
保存图片 (名称,图,宽,高)
ggsave("volcano8.png",volcano,width=8,height=8)
12.主题函数&一页多图&高质量图片导出
主题函数
mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() a <- mg + theme_bw() + geom_text(aes(x = 30, y = 5),label = 'theme_bw()', color = 'red',size = 10)
theme_还可接classic()、dark()、light()、get()、linedraw()、replace()、minimal()、void()
一页多图
grid.arrange函数
生成四张图
library(gridExtra) library(grid) p1 <- qplot(1:5,1:5) p4 <- ggplot(mtcars,aes(x=mpg,y=wt))+geom_point() p3 <- rectGrob(gp=gpar(fill='pink')) p2 <- textGrob('Basic usage') #rectGrob()和textGrob()均是grid包中的函数
将四张图拼到一张图
#grid.arrange函数 grid.arrange(p1,p2,p3,p4,ncol=2)
#layout_matrix参数 gs <- lapply(1:8,function(ii) grobTree(rectGrob(gp=gpar(fill=ii,alpha=0.5)),textGrob(ii))) layout <- rbind(c(1,1,1,2,3), c(1,1,1,4,5), c(6,7,7,8,8)) #rbind生成一个矩阵,图形的排列完全按照该矩阵的排列,1对应第一张图,以此类推。 grid.arrange(grobs=gs,layout_matrix=layout)
ggrepel包
在图上添加文本,可以自动把叠加的文本分开
geom_text_repel函数
library(ggrepel) ggplot(mtcars,aes(wt,mpg))+ geom_point(color='red')+ geom_text_repel(aes(label=rownames(mtcars)),segment.color='blue')+ #此处我们用geom_text_repel()函数添加文字 theme_classic(base_size = 16)
高质量图片导出
tiff('C:\\Users\\lu188\\Desktop\\myplot.tiff',width = 1200,height = 1300,res = 300)
保存至桌面,一般要求300分辨率
ggplot(mtcars, aes(x = mpg, y = wt, color = factor(gear))) + geom_point()
dev.off()
画图,并关闭
小结:自从开始学习R语言,安装某某包,跟着跑代码,理解参数成了最大敌人,R的版本不同也造成了一定的困扰,找不到参数介绍这一功能栏,也没有看到前进、后退功能键,也有好几个包安装不下来,如rms、survminer等等。而且,由于时间拖得太久了,前面学过的又忘的差不多了。。。