“ No one knows everything, and you don't have to.” --free傻孩子在数据分析中最常见的一种图形类型是柱状图,尤其是单组的简单柱状图。但是,在使用常规绘图软件画图时经常需要先对绘图的数据进行预处理,如计算平均值、计算标准差等;之后,才能使用这些处理后的数据进行画图。数据规模较小时,数据预处理所花费的时间成本比较小,但是当数据规模较大时,则时间成本将较高。本节为大家介绍一种不需要对原始数据处理,直接使用原始数据绘制柱状图的方法。
载入需要的安装包和案例数据
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) 注:若有任何问题可以进入我们的群讨论如下:
|