美文网首页【康华同学】:优秀生物信息学博客
R包ggplot2画散点图+循环批量画+一些基本设置

R包ggplot2画散点图+循环批量画+一些基本设置

作者: 五四四123456789 | 来源:发表于2021-11-03 17:04 被阅读0次

    之前画图用的都是师兄写好的流程,这次需要自己画一些简单的图了,中间涉及学到的一些小知识就都放这里啦,初学者,内容不是很全。

    library(ggplot2)#这个应该都知道,载入R包

    1)图例设置

    theme(legend.background =element_rect(fill = "white",colour = "black"))   #给图例加边框

    theme(legend.position="bottom",legend.key.size= unit(5, "pt"))  #默认图例是在右边的,这里自定义设置图例位置在下方(“bottom”),大小为5

    guides(color = FALSE)#按颜色分组后,不显示颜色分组的图例

    theme(legend.title=element_blank())  #不显示图例的标题

    2)坐标轴(ggplot2——坐标系篇 - 简书 (jianshu.com) 这里很详细)

    theme(axis.line=element_line(colour="black"))   #设置坐标轴为黑色

    ylim(0,4) + xlim(0,8) #设置坐标轴范围

    labs(x="x轴名称",y="y轴名称") #设置坐标轴名称

    coord_fixed(ratio = 数字)  #当刻度太密集挤在一起时,用这个拉长坐标轴

    scale_x_continuous(limits=c(0,1),breaks=seq(0, 1, 0.05)) + scale_y_continuous(limits=c(0,1),breaks=seq(0, 1,0.05)) #设置坐标轴范围和间隔

    theme(axis.text.y = element_blank())   #设置axis.text.y则只删去 Y 轴的刻度标签,X 轴同理

    theme(axis.text.y =element_blank())   #隐藏Y轴的刻度文本(axis.ticks)

    theme(axis.ticks=element_blank())   #隐藏坐标轴的刻度线(只能x轴和y轴一起隐去)

    3)背景

    theme(panel.grid=element_blank())  #去掉背景里的网格线

    theme_set(theme_bw())  #设置背景为白色

    theme_classic() #ggplot里的一个主题,不要周围的边框只要两个坐标

    4)分别在图中添加横向虚线和竖向虚线(下图代码表示,过(0,0)的红色直线,粗细为0.5)

    geom_hline(yintercept=c(0,0),color="red",size=0.5,linetype="dotted")+ geom_vline(xintercept=c(0,0),color="red",size=0.5,linetype="dotted")

    5)因为有图例的存在,原来应该是正方形的图可能实际不是正方形,加上这个保持

    + coord_fixed()

    6)画散点图:

    ggplot(data=data1, aes(x=h1,y=h2, color= in_all, group=1))

    或者:ggplot(data=data1, aes(h1,h2, color= in_all))

    #x轴为h1的数据,y轴为h2的数据,根据in_all这一列的数据分组,默认会给不同分组不同颜色,也可以自定义颜色(往下看);

    # 也可以用形状表示分组,就是把这里的color改成shape

    # 同时用形状和颜色表示分组(比如3组数据分别用绿色圆,红色方,蓝色三角表示——不同分组的颜色和形状都不同)可以是:(color=in_all, shape=in_all),当然这样的话还是会自动给颜色和形状,想自定义的话再加上函数: scale_colour_manual 和scale_shape_manual  (见下述)

    #这里 group=1 也可以不写,个人试了下感觉没有影响,但是有时候画折线图但是点不能被连接起来,加上group=1就可以了

    7)设置点的大小

    geom_point(size=3)

    geom_point(stat= "identity", aes(size=var), alpha =0.5, show.legend = TRUE) + scale_size(range = c(0.1,1.8),guide=FALSE) #根据var列的数值,设置点的大小(从0.1到1.8大)

    8)自定义不同分组的颜色

    scale_colour_manual(values =c("blue", "red"))

    scale_color_manual(values=c(rep("blue",19),rep("green",19),rep("yellow",19),rep("red",19),rep("black",7)))     #红色重复19次,绿色重复19次…..黑色重复7次

    9)自定义不同分组的形状

    scale_shape_manual(values =rep(1:83, len = 83))   #R的形状只有25种,要使用多于25的形状,会用符号和字母代替,比如这里,要使用83种——但是第26-32种形状总是报错无法显示,不知道为啥

    scale_shape_manual(values=rep(0:18,5))    #0-18的形状,重复使用5次 (这里19和21的形状我真不懂有啥不同,反正我画出来是一样的,可能是透明度啥的吧,所以就只用了0-18的图案)

    R的图形

    10)同时用不同颜色和形状表示分组:如绿色三角、红色三角、黄色三角、绿色圆、红色圆、黄色圆分别代表不同的数据(这样就可以表示25以上的分组,且自定义颜色不用使用渐变色)

    ggplot(data1,aes(h1,h2)) + geom_point(aes(shape=id, col=color)) +scale_colour_manual(values= c("blue", "red", "green"))+scale_shape_manual(labels= labels, values = c(0,15,1,16,0,15,1,16,0,15,1,16))+guides(shape =guide_legend(override.aes = list(color = rep(c('blue', 'red', 'green'), each =4))),color = FALSE)    

    #0,15,1,16这四种形状,分别用蓝色,红色,绿色表示,这里一共表示了id列有3*4=12个数据,但是这样写需要数据量能够= n * n,如果有83个数据呢?

    #且这里需要新建一列名为color的列(相当于给一个新的分组),这里是形状根据id分组,颜色根据color列分组,比如这里的12个数据,color列的内容可以为:(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),超麻烦有木有!

    ggplot(data1, aes(h1,h2)) +geom_point(aes(shape=id, col=id)) +scale_color_manual(values=c(rep("blue",19),rep("green",19),rep("yellow",19),rep("red",19),rep("black",7)))+scale_shape_manual(values=rep(0:18,5)) 

    #需要注意,scale_color_manual里面,颜色的数量一定要与实际数据的数量一致,比如id列有83个数据:19*4+7=83;scale_color_manual里一定要>=83

    #可以实现和上面那个一样的功能而且写起来简单多了

    11)然而我最终还是画的别的,代码如下:

    ggplot(data=data1,aes(x=h1, y=h2, color= all,group=1))+geom_point(size=3) + scale_colour_manual(values = c("blue","red")) + xlim(-1,1) + ylim(-1,1) +geom_hline(yintercept=c(0,0),color="red",size=0.5) +geom_vline(xintercept=c (0,0),color="red",size=0.5) + coord_fixed()

    12)批量画图(这里的是看到来自于另一篇简书R语言循环多个文件画图生成一个or批量生成多个pdf文件 - 简书 (jianshu.com),这里讲的比下面详细)

    每个数据文件生成一张图:

    for (i in dir("画图用的数据所在的文件的全路径")){

        name_pre2 <- unlist(strsplit(i, "-"))[1]    #比如数据是R_data1.tab-new.txt,我希望最后画出来的图的名字是data1,这里就以 - 符号分割,取出R_data1.tab

        name_pre1 <- unlist(strsplit(name_pre2, "_"))[2]  #取出data1.tab

        name=sub(".tab","",name_pre1)  #我其实不是很理解这里,但是这里是取出了data1。不能用上述方法取,因为如果是用 . 分割,. 代表全部,会出错

        cc <- paste("画图用的数据所在的文件的全路径","/",i,sep="")  #正确的找到文件的路径和名称,但是我不是很理解emmm

        p<-ggplot(画图的代码)

        ggsave(p,file=paste(name,".jpg",sep=""))  #也可以选择保存为“.pdf”等

    }

    相关文章

      网友评论

        本文标题:R包ggplot2画散点图+循环批量画+一些基本设置

        本文链接:https://www.haomeiwen.com/subject/rfjkzltx.html