午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

繪制單組和多組柱狀圖

 科白君 2021-08-12



 No one knows everything, and you don't have to.”   --free傻孩子


"R數(shù)據(jù)分析"專題·第6篇
  編輯 | free傻孩子
  4445字 | 7分鐘閱讀

本期推送內(nèi)容
在數(shù)據(jù)分析中最常見的一種圖形類型是柱狀圖,尤其是單組的簡單柱狀圖。但是,在使用常規(guī)繪圖軟件畫圖時經(jīng)常需要先對繪圖的數(shù)據(jù)進行預(yù)處理,如計算平均值、計算標準差等;之后,才能使用這些處理后的數(shù)據(jù)進行畫圖。數(shù)據(jù)規(guī)模較小時,數(shù)據(jù)預(yù)處理所花費的時間成本比較小,但是當數(shù)據(jù)規(guī)模較大時,則時間成本將較高。本節(jié)為大家介紹一種不需要對原始數(shù)據(jù)處理,直接使用原始數(shù)據(jù)繪制柱狀圖的方法。
01


單組柱狀圖


載入需要的安裝包和案例數(shù)據(jù)

library(export)
library(tidyverse)
data("mtcars")
names(mtcars)

本節(jié)我們使用mpg(英里/加侖)作為y軸,cyl(氣缸數(shù)量)作為x軸;通過str(mtcars)這一代碼,我們能夠得知無論是y軸還是x軸,其向量類型都是數(shù)值型。因為柱狀圖中x軸的數(shù)據(jù)通常是字符型變量,所以我們把x軸轉(zhuǎn)變?yōu)榱俗址妥兞俊?/span>

代碼如下:

mtcars %>%
  mutate(cyl2 = as.character(cyl)) -> mtcars2

繪圖之前,首先我們設(shè)置一下繪圖的各個細節(jié),如字體大小、背景等等參數(shù)。

代碼如下:

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

展示一下原始數(shù)據(jù)格式方便大家繪圖,格式如下:

繪圖

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必須包含數(shù)據(jù)data,映射aes(); x定義x軸;y定義y軸,fill定義柱狀圖的顏色類型;stat_ summary(); 該函數(shù)是本節(jié)推薦的核心內(nèi)容,它能夠根據(jù)給定的代碼對數(shù)據(jù)進行處理;例如fun= mean,意思是根據(jù)x軸分組,對y軸數(shù)據(jù)取平均值;geom是定義繪圖數(shù)據(jù)類型的函數(shù),geom=“bar”意思是繪制柱狀圖,還可以是“point”(點)、“pointrange”(點范圍)、“l(fā)ine”(線)、“errorbar”(誤差線)等;width是定義柱子粗細的函數(shù),size是定義粗細的函數(shù)。

導(dǎo)出圖片:

graph2ppt(file = "bar",width = 6, height = 4.5, append = TRUE)
02

分組柱狀圖


library(tidyverse)
library(MASS)#為了使用這個包里面的數(shù)據(jù)所以才加載的

使用states模擬存在多組情況的數(shù)據(jù)

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
#如果是自己的數(shù)據(jù),上面這些代碼是不需要運行的。
#以上代碼的目的是收集和整理原始數(shù)據(jù)。

states2是存在兩個分組的原始數(shù)據(jù),組1為state.region;組2為group。原始數(shù)據(jù)格式如下:

對數(shù)據(jù)進行處理(分組柱狀圖需要對數(shù)據(jù)變形):

states2_melt <- reshape2::melt(states2, id.vars = c("state.region","group"))

變形后的繪圖數(shù)據(jù)如下:

繪圖

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

導(dǎo)出圖片:

graph2ppt(file = "bar",width = 6, height = 4.5, append = TRUE)

注:若有任何問題可以進入我們的群討論如下:

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多