大数跨境
0
0

使用matplotlib让你的数据更加生动(二)

使用matplotlib让你的数据更加生动(二) AI算法之道
2021-11-12
0
导读:本文详细地介绍了使用matplotlib画堆叠图、树地图、箱型图和提琴图的样例,并给出了相关可视化效果。





01


引言

Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。
http://c.biancheng.net/matplotlib/

在上一节中我们介绍了使用matplotlib进行数据可视化的几种表现方法,包括折线图、散点图、饼状图以及柱状图; 今天我们来继续学习堆叠图、树地图、箱型图和提琴图,那么我们开始吧。



02


堆叠图和树地图


堆叠图可以很方便的比较数据间不同情况下的差异。

树地图的思想就是通过方块的面积来表示,面积越大,其代表的值就越大,反之亦然。

可视化结果:


  • 堆叠图:左上占比100%的堆叠面积图。它用于表示各种数据集而不会彼此重叠,它显示了每个组件相互堆叠以及每个组件如何构成完整的图形。其中各个组件可以用不同的颜色表示。

  • 树地图:右上借助squarify显示树地图。

代码如下:

def test1():    # left data    M, N = 16, 4    dadosEmp = np.random.random((N, M)) * 0.9 + 0.1    empilha = 100 * dadosEmp / np.sum(dadosEmp, axis=0)    # right data    folhas = 64    area = np.random.random(folhas) * 3 + 1    area = np.round_(area, decimals=2)    cores = np.random.random(folhas)    lado = area.sum() ** 0.5    # param    cmapArvore = cm.get_cmap('rainbow')    cores = cmapArvore(cores)    from squarify import squarify    partes = squarify(area, 0, 0, lado, lado)    x = [parte['x'] for parte in partes]    y = [parte['y'] for parte in partes]    dx = [parte['dx'] for parte in partes]    dy = [parte['dy'] for parte in partes]    fig, (axA, axB) = plt.subplots(1, 2)    # draw left    axA.stackplot(np.arange(M), empilha, baseline='zero')    axA.set_title('stack_plot')    axA.set_ylabel('ratio')    axA.set_xticks(np.arange(M))    axA.set_yticks(np.linspace(0, 100, M))    axA.set_xticklabels([chr(i + ord('a')) for i in range(M)])    axA.legend(['G{}'.format(i + 1) for i in range(N)])    axA.grid(alpha=0.75, linestyle=':')    # draw right    axB.bar(x, dy, width=dx, bottom=y, color=cores, align='edge')    for p, a in zip(partes, area):        x, y, dx, dy = p['x'], p['y'], p['dx'], p['dy']        axB.text(x + dx * 0.5, y + dy * 0.5, a, va='center', ha='center')    axB.set_title('squarify')    plt.show()

函数说明:
stackplot(x, *args, labels=(), colors=None, baseline=’zero’, data=None, **kwargs)

  • x:形状为(N,)的类数组结构,即尺寸为N的一维数组。必备参数。

  • y:形状为(M,N)的类数组结构,即尺寸为(M,N)的二维数组。必备参数。

  • labels:为每个数据系列指定标签。长度为N的字符串列表。

  • colors:每组面积图所使用的的颜色,循环使用。颜色列表或元组。

  • baseline:基线。字符串,取值范围为

    {'zero', 'sym','wiggle','weighted_wiggle'}。

    默认值为'zero'表示绘制简单的堆积面积图。

squarify(values, x, y, dx, dy)

  • values  数据列表

  • x,y  起始点横坐标x与纵坐标y

  • dx,dy  树地图的宽和高


03

箱型图和提琴图


箱型图(Box Plot)于 1977 年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。

小提琴图(Violin Plot)是用来展示数据分布状态以及概率密度的图表。这种图表结合了箱形图和密度图的特征


可视化结果:

  • 小提琴绘图:左上箱图和小提琴图形并列显示。

  • 直方图:右上堆叠直方图显示。

代码如下:
def test2():    # 统计数据    entrev_dia = 1000    dias = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']    ndias = len(dias)    mu = 4 + np.random.random(ndias) * 2    sigma = 0.5 + np.random.random(ndias) * 2    horas = np.random.normal(mu, sigma, (entrev_dia, ndias))    horas += np.random.random((entrev_dia, ndias)) * 2 - 1    # 显示参数    cmapStat = cm.get_cmap('cool')    posicao = np.arange(ndias) * 1.5    fig, (axA, axB) = plt.subplots(1, 2)    # 箱图和小提琴图    bplots = axA.boxplot(horas, positions=posicao - 0.25,                         vert=True, widths=0.25,                         patch_artist=True, notch=True)    violins = axA.violinplot(horas, positions=posicao + 0.25,                             widths=0.25, showmeans=True)    for i, (box, violin) in enumerate(zip(bplots['boxes'], violins['bodies'])):        cor = cmapStat(i / ndias)        box.set_facecolor(cor)        violin.set_facecolor(cor)        violin.set_edgecolor('black')        violin.set_alpha(0.75)    axA.set_title('box_violin')    axA.set_ylabel('sleep time')    axA.set_xticks(posicao)    axA.set_yticks(range(1, 10))    axA.set_xticklabels(dias)    axA.set_xlim((-0.5, 6.5))    axA.grid(alpha=0.75, linestyle=':')    # Histogram    n, bins, patches = axB.hist(horas, bins=50, stacked=True)    for i, patchList in enumerate(patches):        for patch in patchList:            patch.set_facecolor(cmapStat(i / ndias))    axB.set_title('Histograma')    axB.set_xlabel('sleep time')    axB.set_ylabel('count of people')    axB.legend(dias)    plt.show()
函数说明:

boxplot(x,notch=None,vert=None,positions=None,widths=None,patch_artist=None, **kwargs)

  •  x:指定要绘制箱线图的数据。

  • notch: 是否是凹口的形式展现箱线图

  • vert: 是否需要将箱线图垂直摆放

  • positions: 指定箱线图的位置

  • widths: 指定箱线图的宽度

  • patch_artist: 是否填充箱体的颜色

                     

violinplot(dataset, positions=None, widths=0.5, showmeans=False, data=None)

  • dataset:  指定要绘制提琴图的数据

  • positions: 指定提琴图的位置

  • widths: 指定提琴图的宽度

  • showmeans:指定是否在图中显示均值



04

总结


本文详细地介绍了使用matplotlib画堆叠图、树地图、箱型图和提琴图的样例,并给出了相关可视化效果。


您学废了吗?



注:关注公众号,后台回复 matplotlib, 即可获取完整代码


【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读185
粉丝0
内容573