• 背景

Excel中无法实现分组区分颜色。
右边的图是我手动点击各个柱形修改分组颜色的。
请问如何在R和Excel中分别实现右图?

  • 更新后完整解决方案:
# 数据载入 --------------------------------------------------------------------# 处理合并单元格:
# openxlsx::read.xlsx(fillMergedCells = TRUE)
# 处理拆散单元格(向下填充缺失值):
# tidyr::fill(type, .direction = “down”)library(tidyverse)
a <- readxl::read_excel("E:/histgram_filled_by_groups.xlsx", sheet = "Sheet4", col_names = TRUE)
a <- a %>% tidyr::fill(type, .direction = "down")# 数据整理 --------------------------------------------------------------------a <- a %>% mutate(num = 1:nrow(a)) %>% # 新创建一个有序变量,用于给新变量排序unite(col = type_month,c(type, month),sep = "_",remove = FALSE) # 合并为新变量,mutate(paste)、unite均可以
a %>% glimpse() %>% anyNA()# 三种排序错误:
# ①:num作为字符融合为num_type_month,造成十位数跑到个位数前面
# ②:num没有因子化,默认识别为连续变量导致覆盖标签时个数不一致
# ③:aes修改坐标系,type_month没有因子化,导致按照字母顺序排序# 对应解答:
# ①:要用独立的num作为自变量
# ②:使用factor对其离散化处理
# ③:aes(x = type_month %>% factor(levels = c(type_month)))# 累积柱状图,不需要对type、month融合,根据其中一个作为横坐标即可# 绘图方法一 ---------------------------------------------------------------------# 方法一参考文献:https://www.delftstack.com/zh/howto/r/ggplot-axis-tick-labels-in-r/
# scale_x_discrete(标题,breaks,labels)离散变量,要求先将变量转化为因子/离散数据
# scale_x_continuous连续变量p1 <- a %>% ggplot(mapping = aes(x = num %>% factor(), # num转化为因子变量,横坐标变为离散数据y = value,col = type,fill = type, # 为geom_colgroup = type)) + # 为geom_linescale_x_discrete("type_month",labels = a$type_month) # 用融合后的字符向量覆盖原刻度标签gridExtra::grid.arrange(p1 + geom_col(),p1 + geom_line() + geom_point(),nrow = 2)
# 这种方法最有效,覆盖后的横坐标也严格按照num的顺序排序~# 绘图方法二 ----------------------------------------------------------------------# 方法二参考文献:https://blog.csdn.net/qq_43209742/article/details/106643870p2 <- a %>% ggplot(mapping = aes(x = num, # 此时factor(num)对结果无效,因为aes会被改变y = value,col = type,fill = type, # 为geom_colgroup = type)) + # 为geom_lineaes(x = type_month %>% factor(levels = c(type_month))) + # 修改横坐标,只根据新的坐标顺序排列labs(x = "type_month")gridExtra::grid.arrange(p2 + geom_col(width = 0.8),p2 + geom_line() + geom_point(),nrow = 2)
  • 结果展示

  • 致谢

这是一篇从科学和历史证据的角度探讨信仰的文章:https://chinesecreation.files.wordpress.com/2020/12/e6b182e79c9fe6b182e8af81.pdf
  • 遇到的问题及解决

问题:横坐标只能画三组,无法组内进行对比
解决:
把两组因子变量融合成一组变量*。然后再用ggplot+geom_col()画图就好啦

更新:
*错误:创建一个1:n的序列,作为变量名的开头,会导致十位数跑到2、3、4等个位数的前面,所以不能这么做!!
R语言中对字符型数据有默认的排序方法,所以一般采用行列索引进行循环。如果要直接对字符型数据进行排序,需要按照对应的排序规则调用相关函数。
一般都是提取字符串中的数字,再按照数字进行排序。
解决方法:mutate创建了一个数字向量作为横坐标,然后再用原始数据paste成新字符向量作为横坐标标签覆盖上去。
例如:
mutate(num = 1:nrow(data), v1_v2 = paste…)
mutate(num = 1:nrow(data)); unite(v1_v2, c( v1,v2 ))

问题:将字符向量转化为因子向量
解决:检查格式自定义factor函数的水平levels

问题:geom_histogram错误:stat_bin() can only have an x or y aesthetic.
解决:直方图(geom_histogram)与柱形图有区别。

柱状图有geom_bar() 和 geom_col():
geom_bar() 经过统计变换(count, …prop…);
geom_col()不经过统计变换,代表的就是该分类变量的实际值。
geom_histogram()等同于geom_bar()+stat_bin()。

https://www.jianshu.com/p/57ec06c83fba

参考资料:https://www.jianshu.com/p/05391806ab80

有两种类型的条形图:geom_bar()和geom_col()。
geom_bar()使条的高度与每组中的案例数成正比(或者,如果weight提供美观,则为权重的总和)。
如果您希望条形的高度代表数据中的值,请geom_col()改用。

geom_col需要分类变量x和数值y
geom_bar只需要x,y轴自动映射prob = table[i,j]
https://zhuanlan.zhihu.com/p/101917540

问题:处理合并单元格和缺失值
解决:
处理合并单元格:
openxlsx::read.xlsx(fillMergedCells = TRUE) # 填充所拆散的合并单元格
处理拆散单元格(向下填充缺失值):
tidyr::fill(type, .direction = “down”) # 向下填充

  • 其他
    请问有人知道如何在Excel中实现吗?

  • 应用案例,绘制不同缺陷四至十月产生的报废重量的柱状图

# 数据载入 ----------------------------------------------------------------------library(tidyverse)
item <- readxl::read_excel("E:/histgram_filled_by_groups.xlsx", sheet = "Sheet3")
names(item) <- c("type", "month", "weight")item <- item %>% tidyr::fill(type, .direction = "down")
item %>% .$type %>% table("type" = .) %>% knitr::kable() # 查看填充后频数表 ## 数据整理 --------------------------------------------------------------------item <- item %>% mutate(num = 1:nrow(item),type_month = paste(item$type,item$month,sep = "_")) # mutate(paste)、unite均可以
item %>% glimpse() %>% anyNA()# 画图 ----------------------------------------------------------------------
p <- item %>% ggplot(mapping = aes(x = num %>% factor(),y = weight,col = type,fill = type,group = type)) +scale_x_discrete(labels = item$type_month) +theme(axis.text.x = element_text(angle = 90, hjust = 1)) + # 竖排 #labs(x = "各缺陷四至十月趋势",y = "每月累计重量(吨)")gridExtra::grid.arrange(p + geom_col(width = 0.8),p + geom_line() + geom_point(),nrow = 2)
  • 案例2:绘制跨年度产量折线图
library(tidyverse)
library(openxlsx)
a <- read.xlsx("e:cross.xlsx", fillMergedCells = TRUE)
a <- a %>% mutate(num = 1:nrow(a)) %>% mutate(year = year %>% factor()) # year转化为因子变量,横坐标变为离散数据
a %>% ggplot(mapping = aes(x = num %>% factor(), # num转化为因子变量y = weight,col = year,group = year)) + # 为geom_linescale_x_discrete(labels = a$month) +geom_line() + geom_point() +ggtitle("2#横剪2020-2021每月产量趋势") +labs(x = "月份",y = "产量")
  • 其他补充:
# 查看填充后频数表 # item %>% .$type %>% table("type" = .) %>% knitr::kable() # 竖排刻度标签 #p + theme(axis.text.x = element_text(angle = 90, hjust = 1)) +

模板:


library(tidyverse)
library(openxlsx)
# 载入 openxlsx::read.xlsx; readxl::read_excel + tidyr::fill
a <- read.xlsx("e:cross.xlsx", fillMergedCells = TRUE)# aes
ggplot(a, aes(x = factor(1:nrow(a)),y = weight,col = year,group = year)) +# geomgeom_line() + geom_point() +# scale_x_discrete(labels)scale_x_discrete(labels = a$month)# ggtitle; labs; ...
## 如果将两组连成一条线,请设置group = factor(1)library(tidyverse)
library(openxlsx)
# 载入 openxlsx::read.xlsx; readxl::read_excel + tidyr::fill
a <- read.xlsx("e:cross.xlsx", fillMergedCells = TRUE)# aes
ggplot(a, aes(x = factor(1:nrow(a)),y = weight,col = year,group = 1)) +# geomgeom_line() + geom_point() +# scale_x_discrete(labels)scale_x_discrete(labels = a$month)# ggtitle; labs; ...

R语言绘制分类变量柱状图相关推荐

  1. r语言 回归分析 分类变量_R语言 | 回归分析(二)

    R语言 语言学与R语言的碰撞 Xu & Yang PhoneticSan 学习参考 Discovering Statistics Using R Statistics for Linguist ...

  2. r语言 回归分析 分类变量_R语言进阶之广义线性回归

    广义线性回归是一类常用的统计模型,在各个领域都有着广泛的应用.今天我会以逻辑回归和泊松回归为例,讲解如何在R语言中建立广义线性模型. 在R语言中我们通常使用glm()函数来构建广义线性模型,glm实际 ...

  3. r语言 回归分析 分类变量_R语言下的PSM分析分类变量处理与分析步骤

    最近学习了PSM,我选择了用R去跑PSM,在这过程中遇到了许多问题,最后也都一一解决了,写下这个也是希望大家在遇到相同问题的时候能够得到帮助和启发,别的应该不会遇到太难的问题了哈哈.最近我也没做什么, ...

  4. R语言绘制热图(其实是相关系数图)实践(二)corrplot包

    目录 前言 corrplot包简介 语法和常用参数介绍 函数语法 参数介绍 实践 summary 参考资料 前言 在我的上一篇的内容中(R语言绘制热图实践(一)pheatmap包 ),我以绘制相关系数 ...

  5. R语言 | 二分类和多分类的逻辑回归实现

    目录 二分类逻辑回归 数据准备 模型构建 模型检验 多分类逻辑回归 二分类逻辑回归 首先,我先展示下我逻辑回归的总体代码,如果有基础的同志需要的话,可以直接修改数据和参数拿去用呀: library(l ...

  6. R语言绘制生存曲线图

    R语言绘制生存曲线图 KMunicate是支持按照Morris等人的KMunicate研究推荐的方式生成Kaplan-Meier图. 1958年,Edward L. Kaplan 和Paul Meie ...

  7. R语言绘制二维密度图

    R语言绘制二维密度图 二维密度图显示了两个数值变量之间的关系,一个在x轴上表示,另一个在Y轴上表示,与散点图类似,然后计算二维空间中特定区域内的观测数,并用颜色梯度表示.二维密度图有几种类型,以下主要 ...

  8. R语言绘制棒棒糖图(火柴杆图)

    本博客介绍几种利用R语言绘制棒棒糖图(火柴杆图)的方法. 2. 使用原生ggplot方法 最容易也是最简单想到的方法是直接使用ggplot2包进行更新,这里需要使用ggplot本身的特性,通过图层叠加 ...

  9. 【R语言科研绘图】--- 柱状图

    R语言科研绘图--柱状图 柱状图 R语言科研绘图--柱状图 前言 一.柱状图 二.使用工具 1.所使用的包 2.数据特征 3.绘图 3.1 两组均值之间的比较 3.2 多组均值之间的比较 后记 前言 ...

最新文章

  1. 没中、美这么大的统一市场,欧盟人工智能发展面临双重挑战
  2. California Dreaming
  3. ES6常用知识点概述
  4. Leetcode224 基本加减计算器-双栈和状态转换
  5. 八皇后问题的Java递归算法
  6. PHP和MySQL入门(3)
  7. zhs16gbk对应mysql_数据库的编码浅谈(ZHS16GBK与US7ASCII)
  8. 长沙理工大学计算机网络试题,长沙理工大学考试试卷(计算机网络)要点.docx
  9. BI报表系统在银行业的应用
  10. 2021-2025年中国一次性马桶马桶座套行业市场供需与战略研究报告
  11. PHP curl传输文件的版本兼容性
  12. 2.5 VB编程基础--运算符和表达式
  13. Eclipse创建JSP程序
  14. QR码和PDF417比较
  15. 假如时光倒流,我会这么学习Java 【转载】
  16. 遇到问题---hosts不起作用问题的解决方法
  17. matlab中probIdx = 2 2,利用1stOpt1.5 pro来进行多元非线性拟合
  18. contents属性
  19. 【VBA】Excel根据指定字段自动分页sheet功能的实现
  20. 淘宝服务商怎么入驻(入驻淘宝需要什么条件)

热门文章

  1. 假设检验 | 非参数假设检验 —— KS检验
  2. mysql核心知识之视图的应用
  3. 智过网:一级造价师报考要清楚这些!
  4. EnterCriticalSection讲解
  5. Bugku-Web-Simple
  6. js 乱码 反斜杠_js 转义字符及URI编码详解
  7. skynet中actor模型
  8. java面向编程封装继承多台_java面向对象——封装,继承,多态
  9. java assertthat_assertThat使用方法
  10. Python读取和保存GIF图片