假设名为dat的数据框(data.frame)包含两列,第一列是name,第二列是value。我们希望绘制一个横坐标为name,纵坐标为value的条形图
library(ggplot2)
ggplot(data = dat,aes(x = name, y = value)) +
geom_bar(stat = 'identity')
下面对此图进行改进。
改变填充色与柱子宽度分别可以通过改变geom_bar
函数里的参数fill
与width
实现。如果我们给fill
设定某一颜色,则所有柱子都会变为该颜色。
ggplot(data = dat,aes(x = name, y = value)) +
geom_bar(stat = 'identity',
fill = 'pink', # 改变填充颜色
width = 0.9) # 改变柱子宽度
如果我们希望根据纵坐标值的正负修改填充色,也可以应用如下方法:
ggplot(data = dat,aes(x = name, y = value)) +
geom_bar(stat = 'identity',
fill = ifelse(dat$value>0,'gold','gray40'), # 根据y值的正负设置颜色
width = 0.9)
1.对于横纵坐标轴名称,可以使用labs
函数。
2.对于横纵坐标轴名称与文字的字体,可以使用theme
函数中的如下参数:
axis.title
:横纵坐标标题axis.text
:横纵坐标文字如果我们只想设置横坐标的标题(不设置纵坐标标题),可以设置axis.title.x
参数。以此类推,也可以设置某一坐标轴的文字等等。相反地,如果想统一设置所有文本的格式,可以设置text
参数。
对于如上提到的每一个参数,我们需要调用函数element_text
,并改变它的size
、face
等参数。
比如,在上图基础上做如下改动:
ggplot(data = dat,aes(x = name, y = value)) +
geom_bar(stat = 'identity',
fill = ifelse(dat$value>0,'gold','gray40'), # 根据y值的正负设置颜色
width = 0.9) +
# 横纵坐标轴名称
labs(x = 'Name', y = 'Value')+
theme(axis.title = element_text(size=15,face = "bold"), # 调整横纵坐标轴标题字号并设置为粗体
axis.text.x = element_text(size=13)) # 调整横坐标文字字号
如果横坐标文字太长,我们可以将其旋转一定角度,也可以调整其位置。方法为设置上文提到的element_text
函数中的angle
和hjust
参数。例如:
ggplot(data = dat,aes(x = name, y = value)) +
geom_bar(stat = 'identity',
fill = ifelse(dat$value>0,'gold','gray40'), # 根据y值的正负设置颜色
width = 0.9) +
# 横纵坐标轴名称
labs(x = 'Name', y = 'Value')+
theme(axis.title = element_text(size=12,face = "bold"),
axis.text.x = element_text(angle=90, # 横坐标文字旋转九十度
hjust = 1, # 调整横坐标文字位置
size=15)) # 调整横坐标文字字号
最后为了美观起见,可以删除ggplot2
自带的灰色背景与边框,也可以设置页边距如下。
ggplot(data = dat,aes(x = name, y = value)) +
geom_bar(stat = 'identity',
fill = ifelse(dat$value>0,'gold','gray40'), # 根据y值的正负设置颜色
width = 0.9) +
# 横纵坐标轴名称
labs(x = 'Name', y = 'Value')+
theme(panel.grid.major =element_blank(), # 去除边框
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.title = element_text(size=12,face = "bold"),
axis.text.x = element_text(angle=90, # 横坐标文字旋转九十度
hjust = 1, # 调整横坐标文字位置
size=15), # 调整横坐标文字字号
plot.margin=unit(rep(3,4),'lines')) # 设置图片边距
ggplot2
背景与网格线的简便做法;希望大家可以用ggplot2
画出自己喜欢的图!