R语言——条形图数据可视化的多种方式

news2024/11/20 10:42:12

本文章将会介绍如何使用R语言中的ggplot2包使用条形图进行数据可视化。将会使用一个“生产企业原材料的订购与运输”的订单数据,该数据来自2021数学建模国赛C题。

某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料总体可分为 A B C 三种类型。该企业每年按48周安排生产需要提前制定24周的原材料订购和转运计划,即根据产能要求确定需要订购的原材料供应商(称为供应商和相应每周的原材料订购数量(称为订货量确定第三方物流公司(称为转运商并委托其将供应商每周的原材料供货数量(称为供货量)转运到企业仓库。附件1给出了该企业近5年402家原材料供应商的订货量和供货量数据。根据附件1对402家供应商的供货特征进行量化分析。下面将会主要使用附件1的数据,利用ggplot2包进行条形图可视化。

1 数据读取和预处理操作

建立决策数据分类模型时,使用预处理好的泰坦尼克数据集,预处理好的数据使用下面的方式进行数据切分:

library(ggplot2)
## 设置ggplot2在可视化时的一些基本情况
theme_set(theme_bw(base_family = "STKaiti")+
            theme(plot.title = element_text(hjust = 0.5)))
## 读取附件一的数据并进行简单的预处理
library(readxl)
library(tidyverse)
library(RColorBrewer)
GHdata1 <- read_excel("附件1 近5年402家供应商的相关数据.xlsx",
                      sheet = "供应商的供货量(m³)")
DHdata1 <- read_excel("附件1 近5年402家供应商的相关数据.xlsx",
                      sheet = "企业的订货量(m³)")
## 数据分组计算
## 计算近5年402家供应商所有的供货量总和
Hdata5sum <- GHdata1[,1:2]
Hdata5sum$GHnumber <- rowSums(GHdata1[,3:242])
## 计算近5年402家供应商的企业的订货量总和
Hdata5sum$DHnumber <- rowSums(DHdata1[,3:242])

head(Hdata5sum)
## # A tibble: 6 x 4
##   供应商ID 材料分类 GHnumber DHnumber
##   <chr>    <chr>       <dbl>    <dbl>
## 1 S001     B              49      231
## 2 S002     A             273      309
## 3 S003     C           13138    14279
## 4 S004     B              64      713
## 5 S005     A            6912     6538
## 6 S006     C              30      462

2 条形图数据可视化

(1)可视化图像1:使用条形图只可视化数量较多的50个供应商数据,运行下面程序后可获得可视化图像图1。

## 只可视化数量较多的50个供应商数据
GHtop50 <- Hdata5sum%>%arrange(desc(GHnumber))%>%slice(1:50)
## 条形图可视化
ggplot(GHtop50 ,aes(x = reorder(供应商ID,-GHnumber), y = GHnumber))+
  geom_bar(aes(fill = 材料分类),stat = "identity")+
  theme(axis.text.x = element_text(angle = 90,vjust = 0.5))+
  labs(x = "供应商",y = "供货量",title = "5年来供货量较多的供应商")

(2)可视化图像2:针对使用条形图可视化得到的图像1,可以使用分面对其进一步的分组可视化,运行下面程序后可获得可视化图像图2。

## 使用分面图进行可视化
ggplot(GHtop50 ,aes(x = reorder(供应商ID,GHnumber), y = GHnumber))+
  geom_bar(aes(fill = 材料分类),stat = "identity")+coord_flip()+
  facet_wrap(vars(材料分类), scales = "free_y",nrow = 1)+
  labs(x = "供应商",y = "供货量",title = "5年来供货量较多的供应商")

(3)可视化图像3:针对供货量和订货量的整体情况,可以使用金字塔分组条形图进行可视化,运行下面程序后可获得可视化图像图3。

## DHtop50的订货量和供货量差异
ggplot()+
  geom_bar(data = DHtop50 ,aes(x = reorder(供应商ID,-DHnumber),
                               y = DHnumber,fill = "订货"),
           stat = "identity")+
  geom_bar(data = DHtop50,aes(x = reorder(供应商ID,-DHnumber),
                              y = -GHnumber,fill = "供货"),
           stat = "identity")+
  scale_y_continuous(labels = abs, limits = c(-500000,500000))+
  theme(axis.text.x = element_text(angle = 90,vjust = 0.5))+
  scale_fill_manual("方式",values = c("订货" = "red","供货" = "blue"))+
  labs(x = "供应商",y = "定货量",title = "5年来企业定货量和供应商供货量差异")

(4)可视化图像4:针对供货量和订货量的差异情况,可以使用分组条形图进行可视化,运行下面程序后可获得可视化图像图4。

## 可视化供货和订货差异较大的一些企业
Hdata5sum$chayi <- Hdata5sum$DHnumber - Hdata5sum$GHnumber
chayitop50 <- Hdata5sum%>%arrange(desc(chayi))%>%slice(1:50)
chayitop50
## # A tibble: 50 x 5
##    供应商ID 材料分类 GHnumber DHnumber  chayi
##    <chr>    <chr>       <dbl>    <dbl>  <dbl>
##  1 S201     A           81989   348699 266710
##  2 S140     B          302047   481103 179056
##  3 S126     C           47540   132285  84745
##  4 S348     A           92421   167109  74688
##  5 S151     C          194498   266510  72012
##  6 S160     C              45    62688  62643
##  7 S308     B          136998   186278  49280
##  8 S330     B          136652   172980  36328
##  9 S157     A             395    33284  32889
## 10 S108     B          240950   271445  30495
## # … with 40 more rows
## 可视化
ggplot(chayitop50 ,aes(x = reorder(供应商ID,chayi), y = chayi))+
  geom_bar(aes(fill = 材料分类),stat = "identity")+coord_flip()+
  facet_wrap(vars(材料分类), scales = "free_y",nrow = 1)+
  labs(x = "供应商",y = "定货量-供货量",title = "5年来缺货较多的供应商")

(5)可视化图像5:针对供货量较多的50个供货商的数据,可以使用经过极坐标变换的分组条形图进行可视化,运行下面程序后可获得可视化图像图5。

## 在每个分组数据的后面插入几行缺失值
GHtop50$材料分类 <- as.factor(GHtop50$材料分类)
empty_bar <- 3
to_add <- data.frame(matrix(NA, empty_bar*nlevels(GHtop50$材料分类),
                            ncol(GHtop50)))
colnames(to_add) <- colnames(GHtop50) # 设置数据表的名称
#为数据表添加分组变量
to_add$材料分类 <- rep(levels(GHtop50$材料分类), each=empty_bar)
GHtop50 <- rbind(GHtop50, to_add) # 合并两个数据
GHtop50 <- GHtop50 %>% arrange(材料分类) # 将数据根据分组进行排序
GHtop50$id <- seq(1, nrow(GHtop50))
# 获取每个样本的名称在y轴的位置和倾斜角度
label_data <- GHtop50
number_of_bar <- nrow(label_data) # 计算条的数量
## 每个条上标签的轴坐标的倾斜角度
angle <- 90 - 360 * (label_data$id-0.5) /number_of_bar
label_data$hjust <- ifelse( angle < -90, 1, 0) # 调整标签的对其方式
label_data$angle <- ifelse(angle < -90, angle+180, angle) ## 标签倾斜角度
## 为数据准备基础弧线的数据
base_data <- GHtop50 %>% group_by(材料分类) %>%
 summarize(start=min(id), end=max(id) - empty_bar) %>%
 rowwise() %>% mutate(title=mean(c(start, end)))
## 可视化分组圆环条形图
p1 <- ggplot(GHtop50)+
 ## 添加条形图
 geom_bar(aes(x=as.factor(id), y=GHnumber, fill=材料分类),
          stat="identity",alpha=0.8) +
 ## 添加文本表示每条线的大小
 annotate("text", x = rep(max(GHtop50$id),3), y = c(100000, 200000, 300000),
          label = c("100000", "200000", "300000") , color="blue", size=3,
          angle=0, fontface="bold", hjust=1) +
  ylim(-200000,400000) + ## 设置y轴坐标表的取值范围,可流出更大的圆心空白
  ## 设置使用的主题并使用极坐标系可视化条形图
  theme_minimal() +
  theme(legend.position = "none", # 不要图例
        axis.text = element_blank(),# 不要x轴的标签
        axis.title = element_blank(), # 不要坐标系的名称
        panel.grid = element_blank(), # 不要网格线
        plot.margin = unit(rep(-1,4), "cm"))+ ## 整个图与周围的边距
  coord_polar() + ## 极坐标系
  ## 为条形图添加文本
  geom_text(data=label_data,
            aes(x=id, y=GHnumber+2000, label=供应商ID,hjust=hjust),
            color="black",fontface="bold",alpha=0.8, size=2.5,
            angle= label_data$angle, inherit.aes = FALSE) +
  # 为图像添加基础线的信息
  geom_segment(data=base_data, aes(x = start, y = -10000,
                                   xend = end, yend = -10000),
               colour = "black", alpha=0.8, size=0.6 , inherit.aes = FALSE )+
  ## 添加分组文本信息
  geom_text(data=base_data, aes(x = title, y = -50000,
                                label=材料分类),alpha=0.8,
            colour = "black", size=4,fontface="bold", inherit.aes = FALSE)
p1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1475414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 刷题 [C++] 第240题.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 题目分析 通过分析矩阵的特点发现&#xff0c;其左下角和右上角可以看作一个“二叉搜索树的根节…

ROS-Ubuntu 版本相关

ROS-Ubuntu 版本相关&#xff1a;安装指引 年代ROS1版本Ubuntu 版本2014Indigo14.042016Kinetic16.042018Melodic18.042020Noetic20.04 & 22.04 ROS2兼顾了工业使用上的问题。 年代ROS2版本Ubuntu 版本2022Humble20.04 & 22.042023Iron16.04 相关参考&#xff1a; […

MySQL进阶:大厂高频面试——各类SQL语句性能调优经验

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;MySQL进阶&#xff1a;强推&#xff0c;冲大厂必精通&#xff01;MySQL索引底层&#xff08;BTree&#xff09;、性能分析、使用…

【Java程序设计】【C00336】基于Springboot的防疫物资管理系统(有论文)

基于Springboot的防疫物资管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的防疫物资管理系统&#xff0c;本系统有管理员以及用户二种角色&#xff1b; 管理员&#xff1a;个人中心、管理员管理、用户管理…

AI领域的从业女性, 合成数据和减少AI的偏见等议题

关于企业AI领域创新举措的新闻层出不穷&#xff0c;澳鹏也不例外。AI领域的女性、数据管理和偏见减少的专家建议以及合成数据突破等内容成为今年第三季度各大媒体出版物的头版头条&#xff01;请继续阅读&#xff0c;了解新闻媒体对澳鹏上一季度表现的评价。 ‘虚假’数据如何对…

laravel8配合jwt

composer 安装包 composer require tymon/jwt-authconfig/app.php 注册服务提供者 providers > [Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ]aliases > [JWTAuth > Tymon\JWTAuth\Facades\JWTAuth::class,JWTFactory > Tymon\JWTAuth\Facades\JWT…

Web服务器群集:OpenEuler 部署 LAMP(LNMP) 基础服务

目录 一、实验 1.环境 2. 网络配置 3. MobaXterm远程连接 4. apache 2.4.58 源码编译安装 5. php 8.3.1源码编译安装 6.配置httpd 连接 php-fpm 6. nginx 1.24.0源码编译安装 7. mysql 8.0.36安装 二、问题 1.MobaXterm设置右键复制粘贴 2.OpenEuler如何查看CPU的核…

String LCM

题目链接&#xff1a;Problem - 1473B - Codeforces 解题思路&#xff1a; 先算出两个字符串的最小公倍数&#xff0c;再分别除以字符串长度&#xff0c;构造出两个新的字符串&#xff0c;就是最小公倍数除以老字符串长度个老字符串相加&#xff0c;打个比方&#xff0c;a字符…

STM32驱动SHT30温湿度传感器

这次分享stm32驱动sht30温湿度传感器的方法和代码&#xff0c;这款传感器是仪器仪表行业上常用的一款型号。 目录 1.配置IO 2.写上通用的IIC协议 3.主函数获取数据 1.配置IO 我用到的IO口是 PB15---SCL PB14---SDA IIC中SDA和SCL引脚是开漏电路形式&#xff0c;所以SDA…

小程序框架(概念、工作原理、发展及应用)

引言 移动应用的普及使得用户对于轻量级、即时可用的应用程序需求越来越迫切。在这个背景下&#xff0c;小程序应运而生&#xff0c;成为一种无需下载安装、即点即用的应用形式&#xff0c;为用户提供了更便捷的体验。小程序的快速发展离不开强大的开发支持&#xff0c;而小程…

Java+SpringBoot+Vue:瑜伽馆管理的黄金组合

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

中科数安 | 公司办公终端、电脑文件防泄密管理系统——自动智能透明加密保护核心文件数据\资料,防止外泄

中科数安提供的电脑文件防泄密管理系统是一种专门设计用于保护企业内部敏感文件不被非法复制、传播或泄露的安全软件。这种管理系统采用了自动智能透明加密技术&#xff0c;可以对核心文件数据和资料进行保护&#xff0c;防止外泄。 ——广东中科数安信息有限公司—— www.weae…

半导体行业案例:Jira与龙智插件助力某半导体企业实现精益项目管理

近日&#xff0c;龙智Atlassian技术团队收到了国内一家大型半导体企业的感谢信。龙智团队提供的半导体行业项目管理解决方案和服务受到了客户的好评&#xff1a; 在龙智团队的支持下&#xff0c;我们的业务取得了喜人的成果和进步。龙智公司的专业服务和产品&#xff0c;是我们…

【UE 材质】水晶材质

效果 步骤 1. 先在Quixel Bridge上下载冰纹理 2. 新建一个材质&#xff0c;这里命名为“M_Ice”并打开&#xff0c;添加如下纹理采样节点 继续添加如下节点 此时效果如下&#xff1a; 可以看到此时的材质颜色比较浅&#xff0c;如果希望颜色深一点可以继续添加如下节点 此时效…

三、西瓜书——神经网络

一、神经元模型 在M-P神经网络模型中&#xff0c;神经元接 收到来自n个其他神经元传递过来的输入信号&#xff0c;这些输入信号通过带权重的连接(connection)进行传递&#xff0c;神经元接收到的总输入值将与神经元的阈值进行比较&#xff0c;然后通过“激活函数”(activation …

大数据集群管理软件 CDH、Ambari、DataSophon 对比

文章目录 引言工具介绍CDHAmbariDataSophon 对比分析 引言 大数据集群管理方式分为手工方式和工具方式&#xff0c;手工方式一般指的是手动维护平台各个组件&#xff0c;工具方式是靠大数据集群管理软件对集群进行管理维护。本文针对于常见的方法和工具进行比较&#xff0c;帮助…

naive-ui-admin 表格去掉工具栏toolbar

使用naive-ui-admin的时候&#xff0c;有时候不需要显示工具栏&#xff0c;工具栏太占地方了。 1.在src/components/Table/src/props.ts 里面添加属性 showToolbar 默认显示&#xff0c;在不需要的地方传false。也可以默认不显示 &#xff0c;这个根据需求来。 2.在src/compo…

逆向案例二:关键字密文解密,自定义的加密解密。基于企名片科技的爬取。

import requests import execjsfor i in range(4):i i1url https://vipapi.qimingpian.cn/Activity/channelInformationByChannelNamedata {channel_name: 24新声,page: f{i},num: 20,unionid: W9wLD4rHIZrB3GLTUncmHgbZcEepR78xJa5Zit6XTMtata86DehdxDt/fDbcHeeJWqqIs6k…

Mysql8.0 安装错误:只有在任务处于完成状态(RanToCompletion、Faulted 或 Canceled)时才能释放它。

错误信息&#xff1a; Attempting to start service MySQL80... Failed to start service MySQL80. 只有在任务处于完成状态(RanToCompletion、Faulted 或 Canceled)时才能释放它。 Ended configuration step: Starting the server 刚开始以为是3306端口被占用了&#xff0c;然…

【青龙面板Ck工具】RabbitPro—快捷扫码或短信获取ck

注意&#xff1a;本教程基于Cent OS7.6系统&#xff0c;Faker一键安装版Docker 2.11.3青龙配置&#xff0c;如有不同配置自行注意&#xff0c;经测试基本可兼容。 第一步 配置Docker 由于RabbitPro打包较大&#xff0c;我们先配置一下Docker国内源&#xff0c;加速下载。 打…