R 语言 | 用ggplot2画2个分类变量的计数柱状图

1. 基本柱状图

对于计数数据 + 2个分类变量,画柱状图。
难点:怎么控制组内的柱子间宽?

模拟数据: x轴是汽化器的个数,颜色分类是自动挡/手动挡,y轴是该分类的汽车型号计数。

# 准备数据: 
df1=table(mtcars$carb, mtcars$am); df1
df2=as.data.frame(df1);df2
colnames(df2)=c("carb", "am", "count")
df2
#
library(ggplot2)
# 基础版: 分类是堆叠的
ggplot(df2, aes(x=carb, y=count, fill=am))+
  geom_bar(stat = "identity")+ #identity表示按照当前值画,否则还要统计个数
  theme_classic()+ggtitle("Fig 1")

R 语言 | 用ggplot2画2个分类变量的计数柱状图_第1张图片

ggplot(mtcars, aes(x=carb))+
  geom_bar( aes(fill=am))+ #identity表示按照当前值画,否则还要统计个数
  theme_classic() +ggtitle("Fig 1b")

R 语言 | 用ggplot2画2个分类变量的计数柱状图_第2张图片

(2)分类变量并列

ggplot(df2, aes(x=carb, y=count, fill=am))+
  geom_bar(stat = "identity", position = "dodge")+
  theme_classic()+ggtitle("Fig 2")

R 语言 | 用ggplot2画2个分类变量的计数柱状图_第3张图片

(3)控制柱子的宽度

ggplot(df2, aes(x=carb, y=count, fill=am))+
  geom_bar(stat = "identity", position = "dodge", width=0.4)+
  theme_classic()+ggtitle("Fig 3")

R 语言 | 用ggplot2画2个分类变量的计数柱状图_第4张图片

(4)控制柱间宽度

ggplot(df2, aes(x=carb, y=count, fill=am))+
  geom_bar(stat = "identity",
           width=0.4, #柱子实际宽度
           position = position_dodge(width=0.6))+ #每个柱子占的宽度
  theme_classic()+ggtitle("Fig 4")
# 两个的差,就是组内柱子的间距: position_dodge(width=0.5) - (width=0.4) = 0.1

R 语言 | 用ggplot2画2个分类变量的计数柱状图_第5张图片

2.美化

设置颜色: am Transmission (0 = automatic, 1 = manual)

ggplot(df2, aes(x=carb, y=count, fill=am))+
  geom_bar(stat = "identity",
           width=0.6, #柱子显示宽度
           position = position_dodge(width=0.75))+ #每个柱子占用的宽度,即便不显示内容
  theme_classic(base_size = 12)+
  scale_fill_manual( name="Type", #图例标题
                     breaks=c("1", "0"), #规定图例顺序:从上到下
                     labels=c("manual", "automatic"), #图例的新标签,与breaks一一对应
                     values=c("#1874B7", "#E3B338"), # 颜色,按照 breaks 规定的顺序
                     )+
  labs(x="Number of carburetors", y="Count", title="Car types")+
  theme(
    plot.title = element_text(hjust=0.5, face="bold"), #标题居中、黑体
    legend.position = c("top"), #方位: 上下左右共4个
    legend.justification = "left", #靠左对齐

    legend.key.height = unit(2, "mm"), #控制图例 小图的高度
    legend.key.width = unit(5, "mm"),  #控制图例 小图的宽度
  )

R 语言 | 用ggplot2画2个分类变量的计数柱状图_第6张图片

todo

怎么加 error bar? https://github.com/tidyverse/ggplot2/issues/2251

refer

  • http://www.cookbook-r.com/Graphs/Bar_and_line_graphs_(ggplot2)/
  • http://www.cookbook-r.com/Graphs/
  • https://www.biomooc.com/R/R-draw-adv-ggplot2.html
  • https://r-graphics.org/recipe-bar-graph-adjust-width

你可能感兴趣的:(R,可视化,r语言,开发语言)