创建雷达图时必须考虑什么?

数据挖掘 可视化
2022-02-15 01:49:57

我目前正在分析 WhatsApp 聊天记录。我感兴趣的一件事是两个人交流的时间。我认为这是雷达图(又名蜘蛛图、星图)的完美用例。所以这里是一个例子:

在此处输入图像描述

我觉得这超级难读。相比之下,请查看以下具有完全相同信息的条形图:

在此处输入图像描述

在这里我更容易看到模式:

  • 0 - 5:没有活动(睡觉)
  • 6 - 9:早上高峰(醒来后的消息)
  • 10 - 16:很少活动(工作时间)
  • 17 - 19:活动增加(工作完成)
  • 20 - 21:高活动
  • 22 - 23:下沉活动(上床睡觉)

问题

雷达图的典型用例是什么?对数据有具体要求吗?它们什么时候比条形图更好?我应该如何设置雷达图的刻度?

在人们开始近距离投票之前:我可以很好地想象有类似的研究,比如彩色地图——分析中有多少错误?人们能以多快的速度获得主要见解?

示例代码

如果您想改进现有的可视化:

# core modules
from math import pi

# 3rd party modules
import matplotlib.pyplot as plt
import pandas as pd


def main():
    df = pd.DataFrame({'date': [209, 13, 1, 2, 1, 25, 809, 3571, 1952, 1448, 942, 1007, 1531, 1132, 981, 864, 975, 2502, 2786, 2717, 3985, 4991, 2872, 761]},
                      index=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])
    create_bar_chart(df)
    create_radar_chart(df)


def create_bar_chart(df, output_path='bar_chart.png'):
    df.plot(kind='bar')
    plt.savefig(output_path)


def create_radar_chart(df, output_path='radar_chart.png'):
    """
    Create a radar chart.

    Parameters
    ----------
    df : pandas.DataFrame
        Has a column 'date'
    """
    values = df['date'].tolist()

    df = df.T.reset_index(drop=True)
    df.insert(0, 'group', 'A')

    # number of variable
    categories = list(df)[1:]
    N = len(categories)

    # What will be the angle of each axis in the plot?
    # (we divide the plot / number of variable)
    angles = [n / float(N) * 2 * pi for n in range(N)]
    angles += angles[:1]

    # Initialise the spider plot
    ax = plt.subplot(111, polar=True)

    # Draw one axe per variable + add labels labels yet
    plt.xticks(angles[:-1], categories, color='grey', size=8)

    # We are going to plot the first line of the data frame.
    # But we need to repeat the first value to close the circular graph:
    values = df.loc[0].drop('group').values.flatten().tolist()
    values += values[:1]
    values

    # Plot data
    ax.plot(angles, values, linewidth=1, linestyle='solid')

    # Fill area
    ax.fill(angles, values, 'b', alpha=0.1)
    plt.savefig(output_path)


if __name__ == '__main__':
    main()
1个回答

每当涉及到特定的图表评论时,我都会检查 data-to-viz.com(我与它没有隶属关系)

关于雷达图或蜘蛛图,您可以在此处找到一些缺点让我为读者总结一下。

  • 圆形布局=更难阅读

这是每个圆形布局中的常见问题。人眼可以很容易地理解和比较单个垂直或水平轴上的数据,但在圆形图中却不那么方便。

  • 支持排名

条形图和其他类似的图表,例如棒棒糖,可以让您立即绘制数据的排名。哪个更高哪个更低。在没有开始和结束的雷达图中,这根本不容易。

  • 品类顺序影响巨大

您需要非常小心放置类别的顺序。读者应该非常关注雷达的形状,当您更改类别的顺序时,雷达的形状会发生显着变化。

  • 关于秤

在雷达图中,同时比较不同尺度的不同变量是很常见的。在这些情况下,您需要明确指定它们中的每一个的比例,否则,读者希望在任何地方都有相同的比例和单位。

  • 过度绘图

一系列数据很好。第二个添加了一些引人注目的细节。如果你需要更多,它将变得非常容易阅读。

  • 高估差异

人类能够线性地理解水平轴或垂直轴的差异。但是,当涉及到形状的面积时,它会变成二次方。因此,很容易高估雷达图中两点之间的差异。

解决方法

不幸的是,没有多少事情可以做。如果您认为您的雷达图可读性不够,那么您只能更改为条形图或棒棒糖图。

在您的示例中,您可能会尝试将刻度放在外面以保持内部区域更清晰。像这个

在此处输入图像描述

图片来源:https ://blog.scottlogic.com/2011/09/23/a-critique-of-radar-charts.html#occlusion