绘制单组和多组柱状图
单组柱状图
载入需要的安装包和案例数据
library(export)
library(tidyverse)
data("mtcars")
names(mtcars)
本节我们使用mpg(英里/加仑)作为y轴,cyl(气缸数量)作为x轴;通过str(mtcars)这一代码,我们能够得知无论是y轴还是x轴,其向量类型都是数值型。因为柱状图中x轴的数据通常是字符型变量,所以我们把x轴转变为了字符型变量。
代码如下:
mtcars %>%
mutate(cyl2 = as.character(cyl)) -> mtcars2
绘图之前,首先我们设置一下绘图的各个细节,如字体大小、背景等等参数。
代码如下:
main_theme = theme(panel.background=element_blank(),
panel.grid=element_blank(),
axis.line.x=element_line(size=0.5, colour="NA"),
axis.line.y=element_line(size=0.5, colour="NA"),
axis.ticks=element_line(color="black"),
axis.text=element_text(color="black", size=12),
legend.position="right",
legend.background=element_blank(),
legend.key=element_blank(),
legend.text= element_text(size=12),
text=element_text(family="sans", size=12))
展示一下原始数据格式方便大家绘图,格式如下:
绘图:
ggplot(mtcars2,aes(x= cyl2,y=mpg))+
stat_summary(aes(fill = cyl2),fun = mean,geom = "bar",width = 0.4)+
stat_summary(fun.data = mean_sdl,geom = "errorbar",
width = 0.1, size = 0.25)+
labs(x=" Cyl (Number of cylinders)",
y = "Mpg (Miles/(US) gallon)")+
theme_bw()+
main_theme
出图如下:
代码详解:ggplot必须包含数据data,映射aes(); x定义x轴;y定义y轴,fill定义柱状图的颜色类型;stat_ summary(); 该函数是本节推荐的核心内容,它能够根据给定的代码对数据进行处理;例如fun= mean,意思是根据x轴分组,对y轴数据取平均值;geom是定义绘图数据类型的函数,geom=“bar”意思是绘制柱状图,还可以是“point”(点)、“pointrange”(点范围)、“line”(线)、“errorbar”(误差线)等;width是定义柱子粗细的函数,size是定义线粗细的函数。
导出图片:
graph2ppt(file = "bar",width = 6, height = 4.5, append = TRUE)
分组柱状图
library(tidyverse)
library(MASS)#为了使用这个包里面的数据所以才加载的
使用states模拟存在多组情况的数据
states <- data.frame(state.region, state.x77)
states %>%
mutate(group = if_else(Illiteracy <1, "low",
if_else(Illiteracy >2, "high", "medium"))) %>%
dplyr::select(state.region,Income,group) %>%
filter(state.region=="South"|state.region=="West") ->states2
#如果是自己的数据,上面这些代码是不需要运行的。
#以上代码的目的是收集和整理原始数据。
states2是存在两个分组的原始数据,组1为state.region;组2为group。原始数据格式如下:
对数据进行处理(分组柱状图需要对数据变形):
states2_melt <- reshape2::melt(states2, id.vars = c("state.region","group"))
变形后的绘图数据如下:
绘图:
ggplot(states2_melt, aes(x = group, y = value, group = state.region))+
stat_summary(aes(fill = state.region),fun = mean,
geom = "bar",width = 0.42,
position=position_dodge(0.45))+
stat_summary(fun.data = mean_sdl,size = 0.25,
geom = "errorbar",width = 0.15,
position=position_dodge(0.45))+
theme_bw()+
main_theme
出图如下:
注意:分组柱状图需要在ggplot 的映射信息中给出分组信息,如本示例中的“group = state.region”
导出图片:
graph2ppt(file = "bar",width = 6, height = 4.5, append = TRUE)
注:若有任何问题可以进入我们的群讨论如下:
赞 (0)