statsmodels.graphics.mosaicplot.mosaic

statsmodels.graphics.mosaicplot.mosaic(data, index=None, ax=None, horizontal=True, gap=0.005, properties=<function <lambda>>, labelizer=None, title='', statistic=False, axes_label=True, label_rotation=0.0)[source]

从列联表创建马赛克图。

它允许以严谨且信息丰富的方式可视化多元分类数据。

Parameters:
data{dict, Series, ndarray, DataFrame}

包含数据的列联表。 每个类别应包含一个非负数, 索引为元组。 它期望所有键的组合都存在; 如果不存在,将自动将缺失值视为0。 键的顺序将与插入顺序相同。 如果使用的是字典或Series(或任何其他类似字典的对象), 它将把键作为标签。 如果提供了np.ndarray, 它将生成简单的数值标签。

indexlist, optional

给出类别排序的首选顺序。如果未指定,将默认为给定的顺序。它不支持分层Series的命名索引。如果提供DataFrame,它期望一个包含列名的列表。

axAxes, optional

显示马赛克的图形。如果未给出,将创建一个新的图形

horizontalbool, optional

分割的起始方向(默认沿水平轴)

gap{float, sequence[float]}

要在每个子分类上应用的间隙列表。 如果给定数组的长度小于子类别的数量(或者如果它是一个单一数字),它将以指数递减的间隙进行扩展

propertiesdict[str, callable], optional

一个函数,用于为马赛克中的每个图块获取图块的键,并返回生成的矩形的属性字典,如颜色、阴影或其他类似属性。对于未定义颜色的键,将提供一组默认属性,并将使用颜色变化来帮助视觉上区分各个类别。它应返回None以指示应使用图块的默认属性。可以传递每个键的属性字典,它将在内部转换为正确的函数。

labelizerdict[str, callable], optional

一个根据每个图块的键生成显示在图块中心文本的函数

titlestr, optional

坐标轴的标题

statisticbool, optional

如果为真,将使用一个简单的统计模型为图表赋予颜色。如果该图块的约束条件在独立假设下偏离预期值超过2个标准差,它将从绿色变为红色(对于正偏差,否则为蓝色),并且在超过3个标准差时会获得阴影。

axes_labelbool, optional

在轴上显示每个类别的每个值的名称(默认)或隐藏它们。

label_rotation{float, list[float]}

轴标签的旋转(如果存在)。如果给定一个列表,每个轴可以有不同的旋转

Returns:
figFigure

包含图形的图像。

rectsdict

一个字典,具有与原始数据集相同的键,其中包含对图块坐标和表示它的矩形的引用。

参考文献

A Brief History of the Mosaic Display

迈克尔·弗兰德利,约克大学,心理学系 计算与图形统计杂志,2001年

Mosaic Displays for Loglinear Models.

迈克尔·弗兰德利,约克大学,心理学系 统计图形学部分的会议录,1992年,61-68页。

Mosaic displays for multi-way contingency tables.

迈克尔·弗兰德利,约克大学,心理学系 美国统计协会杂志 1994年3月,第89卷,第425期,理论与方法

示例

>>> import numpy as np
>>> import pandas as pd
>>> import matplotlib.pyplot as plt
>>> from statsmodels.graphics.mosaicplot import mosaic

最简单的用例是获取一个字典并绘制结果

>>> data = {'a': 10, 'b': 15, 'c': 16}
>>> mosaic(data, title='basic dictionary')
>>> plt.show()

一个更有用的例子是由具有多个索引的字典给出的。在这种情况下,我们使用更大的间隙以获得更好的可视化分离效果。

>>> data = {('a', 'b'): 1, ('a', 'c'): 2, ('d', 'b'): 3, ('d', 'c'): 4}
>>> mosaic(data, gap=0.05, title='complete dictionary')
>>> plt.show()

相同的数据可以表示为简单或分层索引的Series

>>> rand = np.random.random
>>> from itertools import product
>>> tuples = list(product(['bar', 'baz', 'foo', 'qux'], ['one', 'two']))
>>> index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
>>> data = pd.Series(rand(8), index=index)
>>> mosaic(data, title='hierarchical index series')
>>> plt.show()

第三个接受的数据结构是np数组,将为其创建一个非常简单的索引。

>>> rand = np.random.random
>>> data = 1+rand((2,2))
>>> mosaic(data, title='random non-labeled array')
>>> plt.show()

如果你需要修改标签和颜色,你可以提供一个函数来创建标签,并提供一个函数来根据键元组设置图形属性

>>> data = {'a': 10, 'b': 15, 'c': 16}
>>> props = lambda key: {'color': 'r' if 'a' in key else 'gray'}
>>> labelizer = lambda k: {('a',): 'first', ('b',): 'second',
...                        ('c',): 'third'}[k]
>>> mosaic(data, title='colored dictionary', properties=props,
...        labelizer=labelizer)
>>> plt.show()

使用DataFrame作为数据源,指定感兴趣的列名

>>> gender = ['male', 'male', 'male', 'female', 'female', 'female']
>>> pet = ['cat', 'dog', 'dog', 'cat', 'dog', 'cat']
>>> data = pd.DataFrame({'gender': gender, 'pet': pet})
>>> mosaic(data, ['pet', 'gender'], title='DataFrame as Source')
>>> plt.show()

(源代码, png, 高分辨率png, pdf)

../_images/graphics_mosaicplot_mosaic_00_00.png

(png, hires.png, pdf)

../_images/graphics_mosaicplot_mosaic_01_00.png

(png, hires.png, pdf)

../_images/graphics_mosaicplot_mosaic_02_00.png

(png, hires.png, pdf)

../_images/graphics_mosaicplot_mosaic_03_00.png

(png, hires.png, pdf)

../_images/graphics_mosaicplot_mosaic_04_00.png

(png, hires.png, pdf)

../_images/graphics_mosaicplot_mosaic_05_00.png

Last update: Oct 16, 2024