R语言可视化及作图7--ggplot2之标签、图例和标题绘制

2021-12-08 17:09:18 浏览数 (1)


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'))

0 人点赞