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

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

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”等

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容