【问题标题】:How to adjust color and text in a statsmodels mosaic plot?如何在 statsmodels 马赛克图中调整颜色和文本?
【发布时间】:2020-10-10 16:49:50
【问题描述】:

我从Mosaic doc 页面的最后一个图中得到了以下代码:

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

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'],  gap=0.06, title='DataFrame')
plt.show()

但是,我希望绘图的颜色在水平方向上是相同的,即将猫和狗类别中的雌性以相同的颜色分组。它也应该适用于男性。我还想增加figsize 并能够在磁贴中输入百分比。

我尝试了这些参数,但找不到方法。

【问题讨论】:

    标签: python matplotlib mosaic-plot


    【解决方案1】:

    figsize可以设置标准matplotlib方式:fig, ax = plt.subplots(figsize=....))并将ax传递给mosaic()函数。

    可以通过properties= 参数更改颜色。这是一个函数,它获取一个键作为输入(例如('cat', 'female'))并输出一个具有Rectangle 属性的字典,例如facecolor、alpha、hatch、linestyle,...。下面的示例将所有猫涂成绿色蓝色,将所有狗涂成棕色。为了区分男性和女性,可以将孵化或 alpha 设置为不同。

    标题可以通过title= 参数传递。该示例使用带有猫百分比的 f 字符串。

    import pandas as pd
    import matplotlib.pyplot as plt
    from statsmodels.graphics.mosaicplot import mosaic
    
    gender = ['male', 'male', 'male', 'female', 'female', 'female']
    pet = ['cat', 'dog', 'dog', 'cat', 'dog', 'cat']
    third_col = [2, 3, 4, 5, 6, 7]
    data = pd.DataFrame({'gender': gender, 'pet': pet, 'third': third_col})
    
    percent_cats = f"cats: {100 * len(data[data['pet'] == 'cat']) / len(data):.1f} %"
    props = lambda key: {'color': 'turquoise' if 'cat' in key else 'sienna'}
    fig, ax = plt.subplots(figsize=(12, 4))
    mosaic(data, ['pet', 'gender'], gap=0.06, title=percent_cats, properties=props, ax=ax)
    plt.show()
    

    这是另一个示例,男性和女性使用不同的颜色,使用的列的顺序发生了变化,并使第一个布局方向水平。

    percent_3rd_col = 100 * data[data['gender'] == 'female']['third'].sum() / data['third'].sum()
    title = f"percent female: {percent_3rd_col:.1f} %"
    props = lambda key: {'color': 'fuchsia' if 'female' in key else 'deepskyblue'}
    mosaic(data, ['gender', 'pet'], horizontal=False, gap=0.06, title=title, properties=props, ax=ax)
    

    【讨论】:

    • JohanC 感谢这项工作。我想知道是否有第三列的数字像 num=[2,3,4,5,6,7] 有没有办法将它作为第三列包含在内,它也将具有单独的颜色以及这些值的比例num 在磁贴中显示?
    • 我更新了第二个例子,通过第三列计算百分比。
    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多