R可视乎|克利夫兰点图系列

简介: 在可靠性实验中,不同产品的测试失效时间可以通过克利夫兰点图进行可视化,今天就对该系列的图进行系统的介绍。主要参考张杰博士的《R语言数据可视化之美》[1],并结合我实际使用经验进行修改。

简介


在可靠性实验中,不同产品的测试失效时间可以通过克利夫兰点图进行可视化,今天就对该系列的图进行系统的介绍。主要参考张杰博士的《R语言数据可视化之美》[1],并结合我实际使用经验进行修改。


数据结构

为了方便起见,我这里直接模拟产生数据进行实验。大家根据自己数据进行变化即可。test_data包含两列,产品名称(因子类型),产品失效时间

注:随机种子的设定,方便大家可以运行出和我一样的结果。

set.seed(1) #设置随机种子
test_data = data.frame("Id" = LETTERS[1:20], "Time" = rnorm(20,10,10)+20)
test_data$Id = as.factor(test_data$Id) #将Id转换为因子型数据

image.gif

棒棒糖图

棒棒糖图(lollipop chart):传达了与柱形图或者条形图相同的信息,只是将矩形转变成线条,这样可减少展示空间,重点放在数据点上,从而看起来更加简洁、美观。

注: 相对柱形图与条形图,棒棒糖图更加适合数据量比较多的情况。横向棒棒糖图,对应条形图;而如果是纵向棒棒糖图则对应柱形图。

使用 ggplot2 包中的散点绘制函数geom_point()及连接线函数 geom_segment()来绘制棒棒图。其中geom_segment()函数根据起点坐标(x,y)和终点坐标(xend,yend)绘制两者之间的连接线。

library(ggplot2)
ggplot(test_data,aes(y = Id,x = Time))+
  geom_segment(aes(x=0,xend=Time,y=Id,yend=reorder(Id,Time)),col="gray60") + #添加连接线
  geom_point(shape=21,size=4,colour="gray60",fill="skyblue")

S8QA4M[Q~2}S2{_`ZN~7~XJ.jpg

如果想按照产品失效时间进行绘制,则可以使用y = reorder(Id,Time)y = Id进行替换。

ggplot(test_data,aes(y = reorder(Id,Time),x = Time))+
  geom_segment(aes(x=0,xend=Time,y=reorder(Id,Time),yend=reorder(Id,Time)),col="gray60") + #添加连接线
  geom_point(shape=21,size=4,colour="gray60",fill="skyblue") + ylab("Product")

image.gif

当然在实际使用中,尤其是在生存分析,可靠性分析中。数据可能包含产品测试起始时间终点时间。这时只需将segement中的x参数进行变化即可。

test_data$start_Time = rnorm(20,5,3) #模拟产生开始时间数据
ggplot(test_data,aes(y = reorder(Id,Time),x = Time))+
  geom_segment(aes(x=start_Time,xend=Time,y=reorder(Id,Time),yend=reorder(Id,Time)),col="gray60") + #添加连接线
  geom_point(shape=21,size=4,colour="gray60",fill="skyblue") + ylab("Product")

SW7~T$P957O%ZL@2NLD`N19.png


克利夫兰点图

克利夫兰点图(Cleveland's dot plot):类似棒棒糖图,只是没有连接的线条,重点强调数据的排序展示及互相之间的差距。克利夫兰点图一般都横向展示,所以 Y 轴变量一般为类别型变量。

只需使用geom_point()即可绘制克利夫兰点图。

ggplot(test_data,aes(y = reorder(Id,Time),x = Time))+
  geom_point(shape=21,size=4,colour="gray60",fill="skyblue") + ylab("Product")

5JKTI28KO]UVVOB55%1[TYN.png


哑铃图

哑铃图(dumbbell plot):可以看成多数据系列的克利夫兰点图,只是使用直线连接了两个数据系列的数据点。哑铃图主要用于:

①展示在同一时间段两个数据点的相对位置(增加或者减少);

②比较两个类别之间的数据值差别。

这里,我们的模拟数据就不大适合了,为了绘制该图,我将数据进行变化。数据实际意义如下:两个工厂对不同产品类型进行相同实验测试,得到各产品的失效时间。

set.seed(2) #再模拟一个工厂得到的数据
test_data1 = data.frame("Id" = LETTERS[1:20], "Time" = rnorm(20,10,10)+20)
test_data1$Id = as.factor(test_data1$Id) 
test_data1$start_Time = rnorm(20,5,3) #模拟产生开始时间数据
test_data_dum = rbind(test_data,test_data1) #把两个厂的数据进行合并
test_data_dum$Group = c(rep(1,20),rep(2,20))
test_data_dum$Group = as.factor(test_data_dum$Group) #设置因子型,group区分两个不同厂房数据

此时前6行数据如下(之后会有工厂2的数据):

head(test_data_dum)

J8J3W2WDV)X(A$9_F]D@@L0.png

前6行数据

绘制时,使用geom_line()根据时间绘制,不同厂使用不同的填充颜色scale_fill_manual(values=c( "#FC4E07","#36BED9")),后面进行小小的微调,将图例放入图片内部,背景变成透明。

ggplot(test_data_dum,aes(y = reorder(Id,Time),x = Time,fill=Group)) +
  geom_line(aes(group = reorder(Id,Time))) +
  geom_point(shape=21,size=4,colour="gray60") + ylab("Product") +
  scale_fill_manual(values=c( "#FC4E07","#36BED9"))+
  theme(
    legend.background = element_blank(),
    legend.position = c(0.85,0.12)
  )

%@F]J$)V8RMUM2%Z3DYQB)T.png

通过这个图可以看出,相同产品在不同厂房测试的数据,由于我的数据是模拟产生的,得到的结果没什么实际意义就不做解释了,主要是分享下如何使用克利夫兰点图进行绘制和拓展。

你可以将该图拓展到你的专业领域,再结合实际情况进行分析。

目录
相关文章
|
C++ Windows
Visual Studio 2019 实现并行编译
使用 Visual Studio 2019 实现并行编译
709 0
Visual Studio 2019 实现并行编译
|
移动开发 资源调度 JavaScript
夹吃灰,推荐:实现 SVG 动画的 5 个 JavaScript 库~
现如今,SVG 已经广泛应用于 Web 开发当中,可缩放而不失真(矢量图形),就是它的最大优势! 但是,你知道 SVG 除了可以被用作于静态图片,还可以应用于 SVG 动画吗? 本篇带来实现 SVG 动画的 5 个 JavaScript 库!
1316 0
|
数据采集 数据可视化 数据挖掘
使用R语言进行主成分分析(PCA)
【4月更文挑战第26天】本文介绍了如何使用R语言进行主成分分析(PCA),包括安装必要包`stats`、`FactoMineR`和`factoextra`,数据预处理如标准化,使用`PCA()`函数执行PCA,以及通过`summary()`、`fviz_pca_ind()`和`fviz_pca_var()`进行结果解读和可视化。此外,还讨论了如何通过载荷系数解释主成分,强调PCA在数据降维和探索数据结构中的作用。
1000 1
|
传感器 监控 Linux
农业温室大棚数据监控系统的设计与实现
农业温室大棚数据监控系统的设计与实现
1048 0
|
机器学习/深度学习 数据采集 算法
机器学习实战应用:分享一些机器学习在实际问题中的应用案例和经验
机器学习实战应用:分享一些机器学习在实际问题中的应用案例和经验
1743 0
|
iOS开发 开发者 MacOS
iOS 应用上架指南:资料填写及提交审核
本文提供了iOS新站上架资料填写及提交审核的详细指南,包括创建应用、资料填写-综合、资料填写-IOS App和提交审核等步骤。通过本指南,您将了解到如何填写正确的资料,并顺利通过苹果公司的审核。
 iOS 应用上架指南:资料填写及提交审核
|
消息中间件 缓存 安全
秒杀系统(1)——秒杀功能设计理念
秒杀系统(1)——秒杀功能设计理念
333 0
|
数据可视化 Go vr&ar
41 个下载免费 3D 模型的最佳网站
在哪里可以找到3D模型?现在许多网站都提供了大量免费和高质量的3D模型,以帮助所有3D创作者节省时间和精力。但是,并非您找到的所有3D模型都有质量保证或免费供个人使用! 在本文中,我们收集了40多个最佳3D模型网站,包括室内设计,建筑外观设计,动物,物体,车辆,游戏角色和环境等,我们还为您提供了用户指南,以便您可以专注于创建其他一些令人惊叹的作品。
2173 0
|
Java 测试技术 Apache
JMeter与Python的多重交响:从入门到高级应用(上)
在性能测试领域,Apache JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。但在某些情境下,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。**”** Jython -----
JMeter与Python的多重交响:从入门到高级应用(上)
UE4/5 使用Sequence录制功能,实现自定义蓝图逻辑的运行
UE4/5 使用Sequence录制功能,实现自定义蓝图逻辑的运行
883 0
UE4/5 使用Sequence录制功能,实现自定义蓝图逻辑的运行