tableau 图表2020/w19挑战; 曲线Curved lines使用技巧。
本次图表挑战的数据来源是《全世界国家居民幸福指数分析》的报告。
我意图模仿一个好评较多的作品:
https://public.tableau.com/profile/tam.s.varga#!/vizhome/WorldHappinessReport_15892668497850/WorldHappinessReport2020
重点提示:
- 数据规整:创建对应每个幸福指数的Ranking列并最后把它们列转行。
- 曲线Curived lines的创建。在数据规整阶段,需要复制数据行。以便创建path列存储数据0 ,101。
数据清洗
这幅作品对源数据做了清洗。
- 去掉了多余的列。
- 把度量幸福指数的7个列,列转行。
- 增加了一个Ranking,按照从a-z的顺序对国家名进行排列。(❌)这步骤理解有误,第2张图,每个指数都一个Ranking排名。
- ⚠️(更改上2步):首先每个指数做一个排名,然后再转置。
清洗完成后的列:
我使用tableau Prep进行数据转制:
后期需要绘制曲线图重新输出的图:
作图
使用tableau desktop作图。
主要分为3部分:
- 点图:行是幸福总分(ladder score),列是国家名(这里用国家名,创建的计算字段Country_Color, 进行了表计算)
- 点图:Circle Ranking, 辅助线图。行是Ranking,⚠️每个指数都有一个国家排名。
- 线图:列是:各个幸福指数。整体呈现一种杂乱和有序的结合。
第一部分:点图
本图展示所有的国家的幸福指数。
行:幸福指数
列:各个国家的索引值。⚠️索引是唯一的,代表不同的国家。
目的:用户点击一个点,同步显示线图上的指数。被点击的点高亮(变成粉色,其他的点的颜色变成灰色)
1,要创建“参数”Country_name.
2,使用参数,
- 创建计算字段Country label_name和Country label_score。目的是当点击一个圆点,显示这个点的国家名和幸福指数。
- 创建计算字段Country_color。目的是点击一个圆点,会变成粉色,其他的点的颜色变成灰色。
3,行轴使用”Ladder score“的平均值。
4,创建计算字段“表1列”: 使用分区函数index()。这个函数会返回分区中当前行的索引,需要你使用“表计算”功能指定表计算的方式:这里使用“特定维度”:
- Country name
- Country_label_name
- Country_color
- ⚠️关于index的使用可以参考这篇文章:https://tableaumagic.com/index-table-calculation/
5,把维度/度量放到标记卡。
- Country_color放到“颜色”,
- Ladder score放到“大小”,
- Country name 放到“详细信息”
- Country label_name和Country label_score放到"标签",还要更改字体大小和颜色,并允许标签覆盖其他标记。
然后,列"表1列"表计算,按照特定维度分组。
最后,调整颜色,字体,去掉网格线,改轴的颜色,等最后的修饰。
第二张图
国家之间不同幸福指数的排名,有7个指数,因此有7个排名,在数据清洗阶段7个排名数据列转置到一起,成为Ranking列, 所以:
行: Ranking.
列:Explained by dimension
本图也要设计一个“大小”,被选中的点是“大点”,其他未被选中的点统一小点,所以用到计算字段Country Size:
IF [Country name] = [Country_name] then 2 ELSE 1 END
然后使用图例调整“编辑大小”
其他步骤:
把几个维度/度量,拖放到“标记”的不同位置。(具体过程略)
注意:在导航栏->仪表盘->“操作”->添加操作:“更改参数”。可以添加参数动作。
第三张图:曲线图。
这是我之前未接触的高级tableau使用技巧。
google一下: tableau how to draw curve line
网上找到这篇文章:https://tableaumagic.com/tableau-qt-curved-lines/
tableaumagic.com是一个教你用tableau制作各种花哨的图形的网站,包括各种高级技能。后文是绘制曲线图的教学。
本挑战绘制曲线图的方法一样。
但是需要对源数据进行变更:
- 建立一个副本
- 合并后输出。
这样就可以根据table name列来创建Path列,并以此创建数据桶Path(bin)曲线图了。
IF [Table Names]='sheet1' THEN 0 ELSE 101 END
然后把在tableau desktop添加数据源。创建和原来的数据表一摸一样的计算字段后,替换数据源即可。
本曲线图的画法类似下面的教学。
可以线创建一个文件夹,然后把需要创建的计算字段放到这个文件夹内:
1. index(代码和教程相同)
2. Path, 然后再创建数据桶
3. lookup
IF FIRST()=0 THEN SUM([ranking]) ELSE sum([ranking])-LOOKUP(sum(zn([ranking])),-1) END
如果当前行是第一行,则显示当前行等级
如果不是第一行,则表达式的结果是当前行的等级。
⚠️,这是关键的一步,可以产生对应的曲线效果。
4. TC_value
WINDOW_MAX([lookup])
5. TC_Start Point
RUNNING_SUM([TC_Value]) - [TC_Value]
6. TC_Running Sum
RUNNING_SUM([TC_Value])
7. Y (代码同教程)
其他调整:
要突出显示的线条被遮挡了,可以通过颜色的排序解决。
仪表盘
背景色等等调整。结果终于出来拉。
教学:
把下图数据存入excel然后代入tableau desktop。
绘制曲线图,需要用到辅助列。因此在原数据表,首先每行都复制一次,然后增加列:Path,值只包括0和101。刚刚复制的行,各有一个值0和101。
使用线图。
在tableau,需要创建几个字段:
Path (bin)
右键选中Path度量->"创建"->"bin"数据桶:弹出一个对话框:
Index
((INDEX()-1)*0.12)-6
Note: we want the index, used as the X-axis to have 100 points from -6 to 6.
这是因为:我们👆创建的数据桶的值范围从0-101。我们index的范围是从-6~6。把0和101代入公式即可得到-6.12和6。
TC_Value
WINDOW_MAX(MAX([Value])) ⚠️此分组的的Value的最大值
TC_Start Point
RUNNING_SUM([TC_Value])-[TC_Value] ⚠️ running_sum返回分组从第一行到当前行的计算表达式的和。这里
RUNNING_SUM([TC_Value])就是说n个最大值相加。
TC_Running Sum
RUNNING_SUM([TC_Value])
Y
[TC_Start Point]
+((1/(1+EXP(-[Index])))*[TC_Value])
Note: 1/(1+EXP(i)) is the Sigmoid Curve function. We multiply this by value to give the desired height.
一个曲线函数。
列
把Path(bin)拖动到列,然后右键单击,确保选中了"显示缺失值"。然后再把它拖动到“标记”的“路径”。
把segment拖动到列
把index拖动到列,表计算选中"Path(bin)".
把Y拖动到行,对Y进行一些编辑:
- Right-click on Y and select Edit Table Calculations.
- In Nested Calculations select TC_Start Point.嵌套计算选中:TC_Start Point
- In Compute Using, select Specific Dimensions and ensure that only Segment is checked.
- In Nested Calculations select TC_Start Point.嵌套计算选中:TC_Start Point
- Drag TC_Value onto the Tooltip Mark.
- Right-click on the Object, go to Compute Using and select Path (Bin).
- Drag TC_Running Sum onto the Tooltip Mark.
- Right-click on the Object and go to Edit Table Calculations.
- In Nested Calculations select TC_Running Sum.
- In Compute Using, select Specific Dimensions and ensure that only Segment is checked.
- In Nested Calculations select TC_Value.
- In Compute Using, select Specific Dimensions and ensure that only Path (bin) is checked.
去掉网格线什么的。
双击x轴,取值范围固定为-6-6。即可得到这个曲线。