两种方式在Tableau Desktop 中创建子弹图(Bullet Chart)

子弹图,顾名思义是由于该类信息图的样子很想子弹射出后带出的轨道。起初,子弹图的发展是为了取代仪表盘上常见的那种里程表,时速表等基于圆形的信息表达方式。子弹图无修饰的线性表达方式使我们能够在狭小的空间中表达丰富的数据信息,这种情况在寸尺寸金的报纸媒介上尤其明显。与通常所见的里程表或时速表类似,每一个单元的子弹图只能显示单一的数据信息源,并且通过添加合理的度量标尺可以显示更精确的阶段性数据信息。另外,子弹图通过优化设计还能够用于表达多项同类数据的对比,例如今年消费实际与去年实际消费的对比关系;再例如,还可以表达一项数据与不同目标的校对结果,例如非常好、令人满意、不好等目标。同时,就我们人类的阅读习惯来说,线性的信息表达方式与我们习以为常的文字阅读相似,相对于圆形构图的信息表达,在信息传递上有更大的效能优势。

方法1  手动制作

1. 拖动 Product Type,Product维度拖动到 Rows 面板。Sales度量拖到Columns,效果如下

2. 增加一条参考线

a)右击横轴,点击添加参考线

b) 这里有四种格式,这里简单的添加Line

c)做一些格式修改以后点击OK应用,效果如下,每个产品类别添加一条均值参考线

d) 移除参考线,接着我们用预计销售额来做对比

e) 把Budget Sales 拖到明细面板,这样在添加参考线的对话框中就能选择Budget Sales了

如图,可以判断销售额是否达标

f) 添加添加分布带

选择向上向下填充

方法2 自动制作

a)分别把Product Type,Product,Sales,Budget Sales 添加到对应的Rows和Columns

b)点击 Show Me 然后选择子弹图图标

软件自动生成效果如下,如果不满意可以自行修改。

时间: 2024-11-05 00:17:18

两种方式在Tableau Desktop 中创建子弹图(Bullet Chart)的相关文章

SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

 下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表     user表:  account表:  然后创建实体类        **第一种通过创建子类的方式查询                             需求:查询所有的用户基础信息以及其所属的账户中的金额     1.创建想要得到多表查询数据的实体类(子类)            

Struts2获取Requst和Session的两种方式

第一种: HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); 第二种: //实现类 implements RequestAware,SessionAware //定义属性 private Map request; private Map session; //Set方法 public void setRequest(Map reque

java 实现多线程的两种方式

一.问题引入 说到这两个方法就不得不说多线程,说到多线程就不得不提实现多线程的两种方式继承Thread类和实现Runable接口,下面先看这两种方式的区别. 二. Java中实现多线程的两种方式 1.  继承Thread类 /** * 使用Thread类模拟4个售票窗口共同卖100张火车票的程序,实际上是各卖100张 */ public class ThreadTest { public static void main(String[] args){ new MyThread().start(

iOS中创建单例的两种方式

刚刚开始做iOS开发的时候,不知道怎么创建单例,在网上搜的也大多数都不太全,所以总结了一下创建单例的两种方式 首先在.h文件中声明类方法 1 +(instancetype)sharedUtils; 然后在.m文件中实现它,实现的方法有两种 第一种,在创建一个对象时先判断在程序中有没有创建过这个对象 1 static PublicUtils *DefaultManager = nil; 2 3 +(instancetype)sharedUtils 4 { 5 if (!DefaultManager

JAVA中创建字符串的两种方式的区别

我们知道,通常在Java中创建一个字符串会有两种方式,通过双引号直接赋值和通过构造器来创建. String x = "abcd"; String y = new String("abcd"); 然而,这两种方式之间的区别是什么?分别应用于哪些情况,之前还不是很懂. 1.双引号的方式 String x = "abcd"; String y = "abcd"; System.out.println(x==y);//true Sys

【java并发】传统线程技术中创建线程的两种方式

传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式大部分人可能都知道,但是为什么这样玩就可以呢?下面我们来详细分析一下这两种方法的来龙去脉. 1. 揭秘Thread中run()方法 上面我们看到这两种方式都跟run()方法有关,所以我们来看一下Thread的源码中run()方法到底都干了什么: @Override public void run()

C++中对象创建的两种方式

在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象.使用这种方法,直接调用类的构造函数. 动态建立类对象,是使用new运算符将对象建立在堆空间中.这个过程分为两步,第一步是执行operator new()函数,在堆空间中搜索合适的内存并进行分配:第二步是调用构造函数构造对象,初

创建线程的两种方式

首先我们需要知道什么是线程:是程序执行流的最小单元,包括就绪.阻塞和运行三种基本状态. 举个简单的例子:我们把生活中的两件事吃饭和写作业当作是两个线程,当你正在写作业的时候,爸妈叫你吃饭,你就直接去了,等吃完饭回来后再接着写作业.这就是相当于两个线程其中一个从运行状态转入就绪状态,另一个线程从就绪状态转入运行状态. 创建线程包括继承Thread类和实现Runnable接口两种方式(JDK5.0以后还包括了实现Callable等方式来实现线程,这里不做介绍,感兴趣的小伙伴可以自己查资料),下面介绍

iOS:创建单例对象的两种方式

单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClassManager*)sharedManager { @synchronized(self)  //同步加锁,在多线程中使用,可以使线程安全 { if(singleManager == nil) { singleManager = [[SingleClassManager alloc]init]; } } return