【问题标题】:Adding diverging colour to python visualisation为 python 可视化添加不同的颜色
【发布时间】:2021-04-13 03:49:31
【问题描述】:

我希望将发散的调色板应用于 matplotlib.pyplot.hist(),它使用熊猫数据帧中的每一列,但我有点迷路了。

这是我到目前为止的代码(带有一些可重现的数据):

import csv
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(font_scale = 0.6)

df = pd.DataFrame([[5, 5, 1.5], [1.8, 2.2, 1], [4.7, 3.6, 2],[3.4, 2.1, 1.8],[3.8, 2, 0.5], 
[3.6, 3.5, 2.5]], columns=['overall', 'astro', 'fake'])


df.hist()
plt.tight_layout()
plt.show()

理想情况下,我会从this question 得到与下图中的调色板类似的点,但我没有找到解决方案。任何帮助/资源,非常感谢。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    您可以遍历生成的轴,然后遍历它们的条以分配新颜色:

    import pandas as pd
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    sns.set(font_scale = 0.6)
    
    df = pd.DataFrame([[5, 5, 1.5], [1.8, 2.2, 1], [4.7, 3.6, 2], [3.4, 2.1, 1.8], [3.8, 2, 0.5], [3.6, 3.5, 2.5]],
                      columns=['overall', 'astro', 'fake'])
    axes = df.hist()
    cmap = plt.cm.Spectral_r
    for ax in axes.ravel():
        if len(ax.containers) > 0:
            num_bars = len(ax.containers[0])
            for bar, val in zip(ax.containers[0], np.linspace(0, 1, num_bars)):
                bar.set_color(cmap(val))
    plt.tight_layout()
    plt.show()
    

    要仅获取颜色范围的子集,而不是完整范围 (np.linspace(0, 1, num_bars)),可以使用较小的范围:

    cmap = plt.cm.RdYlBu_r
    for ax in axes.ravel():
        if len(ax.containers) > 0:
            num_bars = len(ax.containers[0])
            for bar, val in zip(ax.containers[0], np.linspace(0.2, 0.8, num_bars)):
                bar.set_color(cmap(val))
    

    【讨论】:

    • 太棒了-谢谢。我所做的唯一调整是引入了额外的垃圾箱,但这纯粹是装饰性的。
    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    相关资源
    最近更新 更多