Python箱线图颜色映射

2024-04-24 09:02:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个3年的每小时数据框架。我做了一个月的箱线图,把三年的每小时数据加起来。现在我想根据RSM列表中的数字给每个框上色。每个月在RSM列表中都有一个指定的数字,我想把它的颜色从绿色(RSM列表中的最小数字)改为橙色(RSM列表中的最大数字)。 以下是我目前的代码:

RSM = [0.23, 0.26, 0.29, 0.42, 0.4, 0.39, 0.29, 0.29, 0.30, 0.31, 0.35, 0.30]
ax2 = df.boxplot(column=['PEF-MFE'], by='month', showfliers=False, patch_artist=True)
ax2.set_title('') 

Monthly boxplot


Tags: 数据代码框架df列表颜色数字橙色
1条回答
网友
1楼 · 发布于 2024-04-24 09:02:43

您可以在颜色的rgb值中添加权重。箱线图可以接收一个RGB元组,其中有3个浮点值,从0.0到1.0不等。你知道吗

RSM中的值越高,其绿色分量最接近1.0。你知道吗

橙色介于(255/255,130/255,0)和(255/255,170/255,0)之间。在上面的代码中,你可以设置你喜欢的“橙色”。你知道吗

举个例子:



    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.patches import PathPatch

    RSM = [0.23, 0.26, 0.29, 0.42, 0.4, 0.39, 0.29, 0.29, 0.30, 0.31, 0.35, 0.30]
    up = max(RSM)
    down = min(RSM)

    df = pd.read_csv('teste.csv', sep=';')

    greeness = [(RSM[i]-down)/up for i in range(len(RSM))]
    lowest_orange = 0.2 # the higher this value more close to green is the lowest value

    m =['Jan','Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

    bp_dict = df.boxplot(column=['PEF-MFE'],
        by="month",layout=(4,1),figsize=(6,8),
        return_type='both',
        patch_artist = True,
    )

    colors = [(1-(greeness[i] + lowest_orange),(RSM[i])/up,0) for i in range(len(RSM))]
    for row_key, (ax,row) in bp_dict.iteritems():
        ax.set_xlabel('')
        for i,box in enumerate(row['boxes']):
            box.set_facecolor(colors[i])
        ax.set_xticklabels(m)

    plt.show()

结果是:

Result

相关问题 更多 >