R语言绘图系列:
- R语言可视化及作图1--基础绘图(par函数,散点图,盒形图,条形图,直方图)
- R语言可视化及作图2--低级绘图函数
- R语言可视化及作图3--图形颜色选取
- R语言可视化及作图4--qplot和ggplot2美学函数
- R语言可视化及作图5--ggplot2基本要素和几何对象汇总
- R语言可视化及作图6--ggplot2之点图、条形图、盒形图、直方图、线图
- *
1. 标签绘制
代码语言:javascript复制library(ggplot2)
head(mtcars)
p <- ggplot(mtcars,aes(wt,mpg,label=rownames(mtcars)))
代码语言:javascript复制p geom_text() #使用geom_text绘制标签散点图
使用geom_label绘制标签散点图
代码语言:javascript复制p geom_label()
绘制点,并通过nudge参数对标签进行x轴和y轴上的平移
代码语言:javascript复制p geom_point(color='dodgerblue') geom_text(nudge_x = 0.15,nudge_y = -1)
#所有标签整体向右平移0.15,向下平移1
使用angle参数对标签角度进行设置
代码语言:javascript复制p geom_point(color='dodgerblue') geom_text(nudge_x = 0.1,angle=45)
geom_label可以使用fill对颜色进行填充,fontface设置字体,geom_text不能填充颜色
代码语言:javascript复制p geom_label(aes(fill=factor(cyl)),color='white',fontface='bold',family='Times New Roman')
parse参数意思是前面传入的是一个数学表达式,size定义标签相对大小。
代码语言:javascript复制x <- 1:8
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)
#如果parse=FAKSE,图形上显示的就直接是y == 1.2 x^2,而不是图上的公式。
画一个散点图
代码语言:javascript复制p <- ggplot(mtcars,aes(x=wt,y=mpg)) geom_point()
p
annotate函数传入标签
代码语言:javascript复制p annotate('text',x=4,y=25,label='I love R', size=5,color='forest green',family='Times New Roman')
添加矩形
代码语言:javascript复制a= p annotate('rect',xmin=3,xmax=4.2,ymin=12,ymax=21,alpha=.2,fill='forest green')
a
添加短线段
代码语言:javascript复制b=p annotate('segment',x=2.5,xend=4,y=15,yend=25,color='blue')
b
代码语言:javascript复制c=p annotate('pointrange',x=3.5,y=20,ymin=12,ymax=28,color='red',size=1.5)
c
2. 图例绘制
2.1 guide_legend函数(主要参数:color, shape, size) 图例调整函数也属于标度函数的一类,但不可以直接使用加号来连接,必须放在函数中,作为一个参数。
代码语言:javascript复制df <- data.frame(x=1:20,y=1:20,color=letters[1:20])
p <- ggplot(df,aes(x,y)) geom_point(aes(color=color))
p guide_legend(title = 'legend',nrow=4,ncol=5)
#Error: Can't add `guide_legend(title = "legend", nrow = 4, ncol = 5)` to a ggplot object.
#正确方法:
p guides(color=guide_legend('my legend',ncol=5,nrow=4,label.position = 'left'))
代码语言:javascript复制dat <- data.frame(x=1:5,y=1:5,p=1:5,q=factor(1:5),r=factor(1:5))
pp <- ggplot(dat,aes(x,y,color=p,size=q,shape=r)) geom_point()
#画出散点图,在不对图例进行任何调整的情况下,图形有测也会出现三个图例,分别是color,size,shape
pp guides(color='colorbar',size='none',shape='legend')
代码语言:javascript复制pp guides(color=guide_colorbar('color'),shape=guide_legend('shape',ncol=5))
guide_colorbar和guide_legend设置的是不同的图例,guide_colorbar定义色条图例,guide_legend定义普通图例。
代码语言:javascript复制pp guides(color=guide_legend('title'),size=guide_legend('title'),shape=guide_legend('title'))
#三个分类变量都是一个图例,包含了颜色图形和大小
代码语言:javascript复制ggplot(mpg,aes(displ,cty)) geom_point(aes(size=hwy,color=cyl,shape=drv)) guides(color=guide_colorbar(order = 2),shape=guide_legend(order = 3),size=guide_legend(order=1))
#order参数接受一个小于等于99的值
2.2 标度函数scale 对于连续型变量,使用的参数是scale_xxx_continous(),对于分类型变量,使用的是scale_xxx_discrete()。
代码语言:javascript复制pp scale_color_continuous(guide='colorbar')
scale_size_discrete(guide='legend')
scale_shape(guide='legend')
代码语言:javascript复制pp scale_color_continuous(guide=guide_colorbar('color'))
scale_shape(guide=guide_legend('shape',ncol = 5))
scale_size_discrete(guide=guide_legend('size',ncol=5))
2.3:theme函数
代码语言:javascript复制pt <- ggplot(mtcars,aes(mpg,wt,color=factor(cyl))) geom_point()
pt scale_color_discrete(name='cyl')
#由于theme()函数无法定义图例的标题,因此事先用scale函数定义
theme(legend.title = element_text(color = 'blue',family = 'Times New Roman'),
legend.background = element_rect(color='red',linetype = 2))
代码语言:javascript复制pt scale_color_discrete(name='cyl')
theme(legend.position = 'bottom', #将图例放置在图片底部
legend.text=element_text(color = 'red',size=13,angle=45),
#设置图例中图标的标签,颜色为红色,字号为13,并呈45度角放置。
legend.key = element_rect(color='black',fill = 'orange'),
#设置每一个图标的背景,此处边框色设置为黑色,背景填充色为橘黄色。legend.key就是图标
legend.key.height = unit(1,'cm'),
legend.key.width = unit(1,'cm'))
#设置图标的大小,注意此处传入的是unit()。unit()用于设置传入的参数的单位。
在theme函数中,与图例有关的主要参数有:
参数 | 用法 | 功能 |
---|---|---|
legend.background | 接受函数element_rect() | 定义图例背景 |
legend.margin | 接受数值 | 定义图例的边缘范围 |
legend.key | 接受函数element_rect() | 定义图例中每一个小图标的背景 |
legend.key.size | 接受unit() | 定义图例中每一个小图标的大小 |
legend.key.height/width | 接受unit() | 定义图例中每一个小图标的背景大小 |
legend.text | 接受函数element_text() | 定义图例中每一个图标的标签 |
legend.text.align | 取值0-1,0表示左边,1表示右边 | 定义图例标签对齐方式 |
legend.title | 接受函数element_text() | 定义图例标题样式,但是无法定义标题是什么 |
legend.position | 接受字符串:“none”, “left”, “right”, “bottom”, | |
“top”;或者接受一个表示坐标的数值向量 | 定义图例出现的位置 | |
legend.direction | 接受字符串 | 定义图例中图标的排列方式 |
legend.box | 接受字符串: “horizontal”或“vertical” | 定义多个图例的排列方式 |
3. 标题绘制
标题主要有五种:主标题,副标题,角注,x轴标签和y轴标签
代码语言:javascript复制p <- ggplot(mtcars,aes(mpg,wt,color=factor(cyl))) geom_point()
p ggtitle(label = 'New plot title',subtitle = 'subtitle')
labs(color='legend')
xlab('new x label')
ylab('new y label')
labs(caption = '(based on mtcars data)')
ggtitle()只能定义标题和副标题,默认的位置在左上角。
代码语言:javascript复制p labs(title = 'New plot title')
labs(caption = '(based on mtcars data)')
theme(plot.title = element_text(color = 'red',size = 9,hjust = 0.5),
#默认的标题位置出现在左上方,通过hjust参数进行调整,该参数接受一个0-1之间的数值,0表示最左侧,1表示最右侧。
plot.caption = element_text(color = 'blue'))