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

19 篇文章 0 订阅

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

在这里插入图片描述

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

在这里插入图片描述

(2)分类变量并列

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

在这里插入图片描述

(3)控制柱子的宽度

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

在这里插入图片描述

(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

在这里插入图片描述

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"),  #控制图例 小图的宽度
  )

在这里插入图片描述

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
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在R语言ggplot2中创建双柱状图,你可以使用geom_bar()函数,并设置不同的位置和宽度参数来调整柱子的位置和宽度。以下是一个示例代码: ```R library(ggplot2) # 创建一个数据框 data <- data.frame( group = c("A", "B", "C"), value1 = c(10, 15, 20), value2 = c(5, 8, 12) ) # 创建柱状图 p <- ggplot(data, aes(x = group)) + geom_bar(aes(y = value1), stat = "identity", fill = "blue", position = "dodge", width = 0.4) + geom_bar(aes(y = value2), stat = "identity", fill = "red", position = "dodge", width = 0.4) + labs(x = "Group", y = "Value") + theme_minimal() # 显示图形 p ``` 在这个例子中,我们首先创建了一个包含组别和两个值的数据框。然后,我们使用geom_bar()函数两次来创建两个柱状图,分别表示value1和value2。通过设置position参数为"dodge",我们使得两个柱子并排显示。通过设置width参数来调整柱子的宽度。最后,我们使用labs()函数来设置x轴和y轴的标签,使用theme_minimal()函数来设置图形的主题。 #### 引用[.reference_title] - *1* [R 语言 | 用ggplot22个分类变量计数柱状图](https://blog.csdn.net/wangjunliang/article/details/126894320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ggplot2柱状图进阶法](https://blog.csdn.net/weixin_55798278/article/details/128530175)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值