子弹图(Bullet chart)绘制很难吗?绘制技巧整理送你~~
(好久没更新可视化绘制技巧了,继续走着)
今天小编给大家介绍一下子弹图(Bullet chart) 的绘制方法,主要内容包括:
子弹图(Bullet chart)简单介绍
子弹图(Bullet chart)的R绘制技巧
子弹图(Bullet chart)的Python绘制技巧
子弹图(Bullet chart)简单介绍
子弹图(Bullet chart) 给大多数据人的第一印象可能就只是简单的柱形图叠加,但其所使用的场景和表达的含义却远远超过柱形图,特别是在分析环比、同比时。子弹图的主要构成元素和可视化表示如下:
文字标签和主体条柱
刻度量表
主要标记标识
用于对比的标识(可选)
定性范围标识,一般2-5个即可。
文末小编还给大家准备了一个介绍子弹图(Bullet chart) 设计的pdf文件,感兴趣的可以学习下(下载方式文末给出)~,更多关于子弹图(Bullet chart)的介绍,小伙伴可自行探索哈~
子弹图(Bullet chart)的R绘制技巧
得益于R语言在可视化绘制上的便捷性,小编这里分别提供R-ggplot2和R-bulletchartr包绘制子弹图(Bullet chart) 的技巧分享。
R-ggplot2包绘制
R-ggplot2包绘制子弹图(Bullet chart) 还是非常方便的,如下:
「样例一」:
library(tidyverse)
tibble(name = "Example",quant_value = 75,qualitative = 100
) %>% ggplot(aes(x = quant_value, y = name)) +geom_col(aes(x = qualitative), fill = "grey") +geom_col(width = 0.5, fill = "black") +coord_cartesian(ylim = c(0.3, 1.7)) +theme_minimal() +theme(panel.grid.major.y = element_blank())
「样例二」:Add a target
ex_df <- bind_rows(tibble(name = rep("Ex 1", 2),group = c("Qualitative", "Measure"),color = c("grey", "black"),value = c(100, 75),width = c(0.9, 0.5),target = rep(82, 2),ymin = rep(0.7, 2),ymax = rep(1.3, 2)),tibble(name = rep("Ex 2", 2),group = c("Qualitative", "Measure"),color = c("grey", "black"),value = c(88, 64),width = c(0.9, 0.5),target = rep(77, 2),ymin = rep(1.7, 2),ymax = rep(2.3, 2))
)ex_df %>% ggplot(aes(x = value, y = name, fill = color)) +geom_col(width = c(0.9, 0.5, 0.9, 0.5)) +geom_linerange(aes(x = target, ymin = ymin, ymax = ymax),size = 2, color = "red") +coord_cartesian(ylim = c(0.3, 2.7)) +scale_fill_identity() +theme_minimal() +theme(panel.grid.major.y = element_blank())
而绘制其他多类别数据的方法也都是类似的,小伙伴们可自行测试。
R-bulletchartr包绘制
R-bulletchartr包则是专门用于绘制子弹图(Bullet chart) 的第三方包,使用也非常方便,且其对绘图数据的格式要求也比较低,详细介绍如下:
「样例一」:bullet_chart()
数据预览:
绘制代码
## load example data
load(read_example("bc_ex.rda"))bullet_chart(dataframe = bc_ex)
「样例二」:bullet_chart_wide()
数据预览:
绘制代码:
bullet_chart_wide(file_name = read_example("Indicators_Targets_ext.xlsx"),cal_type = "cal")
「样例三」:bullet_chart_vline()
数据预览:
绘制代码:
bullet_chart_vline(file_name = read_example("Indicators_Targets_ext.xlsx"))
更多R-bulletchartr包其他绘图函数和参数设置可参考R-bulletchartr包[1]
Python绘制
Python-matplotlib 绘制
之前小编有转载过一篇文章专门介绍使用Matplotlib绘制子弹图(Python-Matplotlib 子弹图绘制),作者是定义bulletgraph()函数进行绘制,感兴趣的小伙伴可以看下,这里就不再描述。
Python-plotly 绘制
作为Python交互式可视化绘制强大工具之一,plotly库可以绘制多类图表,当然也包括子弹图(Bullet chart),如下:
「样例一」:
import plotly.graph_objects as gofig = go.Figure(go.Indicator(mode = "number+gauge+delta", value = 220,domain = {'x': [0, 1], 'y': [0, 1]},delta = {'reference': 280, 'position': "top"},title = {'text':"<b>Profit</b><br><span style='color: gray; font-size:0.8em'>U.S. $</span>", 'font': {"size": 14}},gauge = {'shape': "bullet",'axis': {'range': [None, 300]},'threshold': {'line': {'color': "red", 'width': 2},'thickness': 0.75, 'value': 270},'bgcolor': "white",'steps': [{'range': [0, 150], 'color': "cyan"},{'range': [150, 250], 'color': "royalblue"}],'bar': {'color': "darkblue"}}))
fig.update_layout(height = 250)
fig.show()
「样例二」:Multi Bullet
import plotly.graph_objects as gofig = go.Figure()fig.add_trace(go.Indicator(mode = "number+gauge+delta", value = 180,delta = {'reference': 200},domain = {'x': [0.25, 1], 'y': [0.08, 0.25]},title = {'text': "Revenue"},gauge = {'shape': "bullet",'axis': {'range': [None, 300]},'threshold': {'line': {'color': "black", 'width': 2},'thickness': 0.75,'value': 170},'steps': [{'range': [0, 150], 'color': "gray"},{'range': [150, 250], 'color': "lightgray"}],'bar': {'color': "black"}}))fig.add_trace(go.Indicator(mode = "number+gauge+delta", value = 35,delta = {'reference': 200},domain = {'x': [0.25, 1], 'y': [0.4, 0.6]},title = {'text': "Profit"},gauge = {'shape': "bullet",'axis': {'range': [None, 100]},'threshold': {'line': {'color': "black", 'width': 2},'thickness': 0.75,'value': 50},'steps': [{'range': [0, 25], 'color': "gray"},{'range': [25, 75], 'color': "lightgray"}],'bar': {'color': "black"}}))fig.add_trace(go.Indicator(mode = "number+gauge+delta", value = 220,delta = {'reference': 200},domain = {'x': [0.25, 1], 'y': [0.7, 0.9]},title = {'text' :"Satisfaction"},gauge = {'shape': "bullet",'axis': {'range': [None, 300]},'threshold': {'line': {'color': "black", 'width': 2},'thickness': 0.75,'value': 210},'steps': [{'range': [0, 150], 'color': "gray"},{'range': [150, 250], 'color': "lightgray"}],'bar': {'color': "black"}}))
fig.update_layout(height = 400 , margin = {'t':0, 'b':0, 'l':0})fig.show()
Python-plotly库绘图功能还是非常强大的,后期公众号会推出系列专题。更多plotly库绘制子弹图(Bullet chart) 可参考plotly库绘制子弹图[2]。
总结
今天的这篇推文,小编简单的介绍了子弹图(Bullet chart) 的R和Python绘制方法,希望小伙伴们可以选择自己喜欢的工具进行绘制哈~
参考资料
[1]
R-bulletchartr包官网: https://acdivocatech.github.io/bulletchartr/index.html。
[2]
plotly库绘制子弹图: https://plotly.com/python/bullet-charts/。
E N D
各位伙伴们好,詹帅本帅假期搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)
推荐阅读
牛逼!Python常用数据类型的基本操作(长文系列第①篇)
牛逼!Python的判断、循环和各种表达式(长文系列第②篇)
牛逼!Python函数和文件操作(长文系列第③篇)
牛逼!Python错误、异常和模块(长文系列第④篇)
子弹图(Bullet chart)绘制很难吗?绘制技巧整理送你~~相关推荐
- 用 Python 制作子弹图也这么简单,爱了~
众所周知,Python 的应用是非常广泛的,今天我们就通过 matplotlib 库学习下如何制作精美的子弹图 1什么是子弹图 一个子弹图约定俗成的定义 子弹图使用长度/高度.位置和颜色对数据进行编码 ...
- 爱了爱了!用 Python 制作子弹图也这么简单!
众所周知,Python 的应用是非常广泛的,今天我们就通过 matplotlib 库学习下如何制作精美的子弹图 1什么是子弹图 一个子弹图约定俗成的定义 子弹图使用长度/高度.位置和颜色对数据进行编码 ...
- ps里面怎么插入流程图_流程图很难画?学会这3个方法,5分钟能绘制出好看又高级的流程图...
工作中,很多时候我们需要绘制流程图,有些小伙伴觉得流程图很难画,费时又耗力.那么今天小编就来给大家分享3种绘制流程图的方法,希望大家学会后,都能快速画出好看的流程图.下面就一起来看看吧~ 一.Exce ...
- 【进阶技巧】如何绘制高颜值XMind思维导图?色彩使用很重要!
思维导图软件推荐: MindManager Edraw MindMaster TheBrain 思维导图是思维可视化的利器,我们用它来辅助思考,同时也用它来展示思维.当一张思维导图被分享时,它的可读性 ...
- 甘特图(Gantt Chart)绘制方法
给大家介绍下甘特图(Gantt Chart) 及其绘制方法,主要内容如下: 甘特图(Gantt Chart) 的简单介绍 甘特图(Gantt Chart) 绘制方法(R+Python) 甘特图(Gan ...
- Power bi 4.3 子弹图
关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 数据集链接见微信公共号底端 1.子弹图的简介 子弹图,顾名思义就是样子很像子弹弹射出后带出的轨道,所以称之为子弹图.子弹图发展之初是为了取代仪 ...
- 3D 真的很难吗,瞧瞧支付宝怎么做?
阿里妹导读:图像作为人类感知世界的视觉基础,是我们在这个信息化时代获取信息.表达信息及传递信息的重要手段,而生成图像最高效准确的方式就是由计算机生成.显示.绘制,这些技术又统称计算机图形技术.计算机图 ...
- Altium Designer初学者入门——stm32最小系统的PCB图(接上一篇原理图绘制)
文章目录 一.PCB封装库 二.从原理图导入到PCB图 三.布局 四.布线 五.覆铜 六.丝印整理 七.电气规则检查 一.PCB封装库 PCB封装库相对原理图库的创建要更麻烦一些,我本人是安装的网上找 ...
- maya! board_3D角色模型很难做?Maya、Zbrush人头建模终极秘笈
MAYA人头建模终极秘笈 .教程可谓经典到掉渣.深入的从MAYA人头建模各个层面详尽的介绍了人头建模的方法和所有应当注意的细节. 一.简介建立可信的人脸 , 是每一个三维艺术家的最终目标之一.但是要获 ...
最新文章
- CString 在_UNICODE宏定义下和普通ASCII编码下的不同
- Android自定义控件属性的使用
- HDU1495 非常可乐
- 使用git remote提交代码
- nginx proxy_cache缓存详解
- Qt creator5.7 OpenCV249之方框滤波(含源码下载)
- 基于SpringBoot+webSocket实现扫码登录功能
- 技术研究院006---B站自用的微服务框架——Kratos
- 开发者该如何利用 C# 加解密?
- BZOJ2327: [HNOI2011]勾股定理
- Word中,Mathtype安装遇到的问题及解决方法
- AI语音外呼机器人是如何帮助电销行业获客?
- 根据不同时区计算北京时间
- VHDL SXT函数
- CryptoJS 下载地址
- CREATE PROCEDURE
- Global Illumination_Screen-Space Directional Occlusion(SSDO)
- Android 从应用程序跳到系统应用管理和应用的权限管理页面
- macvlan源码分析
- Bootstrap 中使用Tooltips(不生效)
热门文章
- idea中如何创建接口
- 离线环境安装Django2.2(亲测)
- Xshell无法启动:要继续使用此程序,您必须应用最新的更新或使用新版本
- 【转】php和java之间rsa加密互通
- matlab删失数据威布尔,基于混合I型删失数据威布尔模型的可接受抽样计划
- python扫描端口脚本_Pyhton扫描端口脚本代码
- android novate乱码,Android RxJava+Retrofit2+RxBinding
- java 文件比较_java 四种写文件比较
- 子窗口_不同线程下主窗口与子窗口的信息交互(一)
- android屏幕适配的五种方式_讲一讲Android 9.0系统的新特性,对刘海屏设备进行适配...