专栏首页数据 学术 商业 新闻子弹图(Bullet chart)绘制很难吗?绘制技巧整理送你~~

子弹图(Bullet chart)绘制很难吗?绘制技巧整理送你~~

今天小编给大家介绍一下子弹图(Bullet chart) 的绘制方法,主要内容包括:

  • 子弹图(Bullet chart)简单介绍
  • 子弹图(Bullet chart)的R绘制技巧
  • 子弹图(Bullet chart)的Python绘制技巧

子弹图(Bullet chart)简单介绍

子弹图(Bullet chart) 给大多数据人的第一印象可能就只是简单的柱形图叠加,但其所使用的场景和表达的含义却远远超过柱形图,特别是在分析环比、同比时。子弹图的主要构成元素和可视化表示如下:

  • 文字标签和主体条柱
  • 刻度量表
  • 主要标记标识
  • 用于对比的标识(可选)
  • 定性范围标识,一般2-5个即可。

标准子弹图(Bullet chart)样例表示

文末小编还给大家准备了一个介绍子弹图(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())

Example01 Of Bullet chart in ggplot2

「样例二」: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())

Example02 Of Bullet chart in ggplot2

而绘制其他多类别数据的方法也都是类似的,小伙伴们可自行测试。

R-bulletchartr包绘制

R-bulletchartr包则是专门用于绘制子弹图(Bullet chart) 的第三方包,使用也非常方便,且其对绘图数据的格式要求也比较低,详细介绍如下:

「样例一」:bullet_chart()

  • 数据预览:
  • 绘制代码
## load example data
load(read_example("bc_ex.rda"))

bullet_chart(dataframe = bc_ex)

Example Of bullet_chart()

「样例二」:bullet_chart_wide()

  • 数据预览:
  • 绘制代码:
bullet_chart_wide(file_name = read_example("Indicators_Targets_ext.xlsx"),
                  cal_type = "cal")

Example Of bullet_chart_wide()

「样例三」:bullet_chart_vline()

  • 数据预览:
  • 绘制代码:
bullet_chart_vline(file_name = read_example("Indicators_Targets_ext.xlsx"))

Example Of bullet_chart_vline()

更多R-bulletchartr包其他绘图函数和参数设置可参考R-bulletchartr包[1]

Python绘制

Python-matplotlib 绘制

之前小编有转载过一篇文章专门介绍使用Matplotlib绘制子弹图(Python-Matplotlib 子弹图绘制),作者是定义bulletgraph()函数进行绘制,感兴趣的小伙伴可以看下,这里就不再描述。

Python-plotly 绘制

作为Python交互式可视化绘制强大工具之一,plotly库可以绘制多类图表,当然也包括子弹图(Bullet chart),如下:

「样例一」:

import plotly.graph_objects as go

fig = 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()

Example01 Of Bullet chart in plotly

「样例二」:Multi Bullet

import plotly.graph_objects as go

fig = 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()

Example02 Of Bullet chart in plotly

Python-plotly库绘图功能还是非常强大的,后期公众号会推出系列专题。更多plotly库绘制子弹图(Bullet chart) 可参考plotly库绘制子弹图[2]。

总结

今天的这篇推文,小编简单的介绍了子弹图(Bullet chart) 的R和Python绘制方法,希望小伙伴们可以选择自己喜欢的工具进行绘制哈~

子弹图PDF文件获取

整理不易,感谢大家帮忙分享,关注本公众号(DataCharm)然后在公众号后台发送 子弹图 即可获知免费下载链接。

参考资料

[1]

R-bulletchartr包官网: https://acdivocatech.github.io/bulletchartr/index.html。

[2]

plotly库绘制子弹图: https://plotly.com/python/bullet-charts/。

本文分享自微信公众号 - DataCharm(shujumeili),作者:宁俊骐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Pygame 第5课】 游戏中的运动

    本来,在上一次pygame的教程中,我只是顺手拿了微信“打飞机”里的图来演示用鼠标控制图片位置的操作。后来觉得,这个游戏还算比较适合用来做例子,也有朋友反馈说想...

    Crossin先生
  • Node 开发一个多人对战的射击游戏(实战长文)

    https://juejin.cn/post/6960096410305822751

    coder_koala
  • 如何用 Python 打飞机 ?

    前言:python 除了生孩子 ,啥都会 。包括打飞机 !今天小詹的一位读者就来教你如何用 python 打飞机 !

    小小詹同学
  • 【响应式编程的思维艺术】 (4)从打飞机游戏理解并发与流的融合

    原文中提供了一个非常详细的打飞机游戏的代码,但我仍然建议你在熟悉了其基本原理和思路后自己将它实现出来,然后去和原文中的代码作对比,好搞清楚哪些东西是真的理解了,...

    大史不说话
  • 飞机大战

    我知道我很懒,一直拖一直拖,拖到最后一刻才肯开始撰写推送,但这次真的不是故意的,本来这个链表的应用我是想给大家介绍下线程池的设计,可是线程池这个东西得牵扯到网络...

    DeROy
  • 手把手教你使用Pygame制作飞机大战小游戏,4万字超详细讲解!

    大家好,偷学Python系列是由小甜同学从初学者的角度学习Python的笔记,其特点就是全文大多由新手易理解的代码与注释及动态演示。刚入门的读者千万不要错过!

    刘早起
  • 手把手教你使用Pygame制作飞机大战小游戏,4万字超详细讲解!

    这次用Python中的pygame模块来完成一个飞机大战的小游戏;基本思路是通过方向键来控制飞机的左右移动射击飞船。先来看下最后的效果

    龙哥
  • 用 Python 制作飞机大战小游戏

    这次用Python中的pygame模块来完成一个飞机大战的小游戏;基本思路是通过方向键来控制飞机的左右移动射击飞船。先来看下最后的效果

    龙哥
  • 10分钟教你用Python做个打飞机小游戏超详细教程

    这次还是用python的pygame库来做的游戏。关于这个库的内容,读者可以上网了解一下。本文只讲解用到的知识。代码参考自网上,自己也做了一点代码简化。尽量把最...

    用户1621951
  • 子弹图(bullet chart)

    今天跟大家分享的图表是——子弹图(bullet chart)! ▽▼▽ 名字听起来是不是很高大上呀,这个图表是用于日常绩效评估的,可以从图表中了解到各个项目的目...

    数据小磨坊
  • 基于SceneForm实现子弹射击(绘制子弹运行轨迹)

    Sceneform 框架很强大,不了解 Sceneform 的时候,觉得要想做 3D 场景需要会 OpenGL,而 OpenGL 的学习曲线很陡;接触到这个框架...

    砸漏
  • python应用篇之外星人入侵项目——武装飞船(完)

    上篇文章,我们给大家介绍了飞船的左右移动,以及配置相应的飞船速度以及相应的限制飞船的运动范围。最后将方法check_events方法进行了重构;并且对最近的几...

    一计之长
  • 10分钟教你用Python做个打飞机小游戏超详细教程

    这次还是用python的pygame库来做的游戏。关于这个库的内容,读者可以上网了解一下。本文只讲解用到的知识。代码参考自网上,自己也做了一点代码简化。尽量把最...

    短短的路走走停停
  • Python 项目实践一(外星人入侵小游戏)第三篇

    接着上节的继续学习, 一 重构:模块game_functions 在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化既有代码的结构,使其更容易扩展。...

    用户1198337
  • 关于流程图设计,你需要Get的几点必备知识

    流程图(Flow Chart)这个概念对很多人来说并不陌生,但如果让你定义或者举例说明什么是产品流程图,恐怕还是有难度的。或许诸如“用户体验”、“交互设计”、...

    奔跑的小鹿
  • 【Pygame 第6课】 面向对象的游戏设计

    上节课中,我们的飞机已经可以发射子弹了,尽管只有一颗。为什么我只加了一颗?试着多加几颗你就会发现,你得用好几个变量去分别记录它们的xy坐标,在主循环中判断每一颗...

    Crossin先生
  • ChartDirector应用笔记(一)

    ChartDirector介绍 ChartDirector是一款小巧精细的商业图表库。其适用的语言范围非常广泛,包括.Net, Java, Asp, VB, ...

    24K纯开源
  • 子弹图(条形图实现)(Bullet Chart)

    今天要跟大家分享的技巧是子弹图(Bullet Chart)在条形图中的实现! ▽▼▽ 前一篇分享了子弹图(柱形形式)的 制作技巧,这一片接着讲解子弹图在条形图中...

    数据小磨坊
  • 原 ionic+js+html5 飞行射击

    魂祭心

扫码关注云+社区

领取腾讯云代金券