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, 它将生成简单的数值标签。
- index
list,optional 给出类别排序的首选顺序。如果未指定,将默认为给定的顺序。它不支持分层Series的命名索引。如果提供DataFrame,它期望一个包含列名的列表。
- ax
Axes,optional 显示马赛克的图形。如果未给出,将创建一个新的图形
- horizontalbool,
optional 分割的起始方向(默认沿水平轴)
- gap{
float, sequence[float]} 要在每个子分类上应用的间隙列表。 如果给定数组的长度小于子类别的数量(或者如果它是一个单一数字),它将以指数递减的间隙进行扩展
- properties
dict[str,callable],optional 一个函数,用于为马赛克中的每个图块获取图块的键,并返回生成的矩形的属性字典,如颜色、阴影或其他类似属性。对于未定义颜色的键,将提供一组默认属性,并将使用颜色变化来帮助视觉上区分各个类别。它应返回None以指示应使用图块的默认属性。可以传递每个键的属性字典,它将在内部转换为正确的函数。
- labelizer
dict[str,callable],optional 一个根据每个图块的键生成显示在图块中心文本的函数
- title
str,optional 坐标轴的标题
- statisticbool,
optional 如果为真,将使用一个简单的统计模型为图表赋予颜色。如果该图块的约束条件在独立假设下偏离预期值超过2个标准差,它将从绿色变为红色(对于正偏差,否则为蓝色),并且在超过3个标准差时会获得阴影。
- axes_labelbool,
optional 在轴上显示每个类别的每个值的名称(默认)或隐藏它们。
- label_rotation{
float,list[float]} 轴标签的旋转(如果存在)。如果给定一个列表,每个轴可以有不同的旋转
- data{
- Returns:¶
参考文献
- 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()