首页 > 解决方案 > 基于 Dataframe 中的值的颜色条形图

问题描述

我绘制了一个堆积条形图(参见此处:https ://imgur.com/a/ESJeHuF ),由下面的数据框组成。

                            condition1       condition2      condition3
timestamp                                                
2019-10-30 01:41:43             1.0             4.0             0.0
2019-10-30 01:50:11             1.0             2.0             4.0
2019-10-30 01:50:59             1.0             2.0             4.0
2019-10-30 01:51:36             1.0             2.0             4.0
2019-10-30 01:52:27             1.0             3.0             4.0
2019-10-30 01:53:10             2.0             4.0             0.0
2019-10-31 02:25:14             5.0             0.0             0.0
2019-10-31 04:15:54             5.0             0.0             0.0

我希望条形图中的颜色通过此颜色列表与数据框中的相应值匹配:

color_list = ['r', 'g', 'b', 'm', 'k', 'k']

(例如,如果第 2 个到最后一个时间步的值为 5,则将堆积条形图的段着色为'k',并为堆积条形图列的所有段重复该行为。

下面的代码绘制了堆叠的条形图,但是颜色错误(上面的链接显示了这一点)。它仅将前三种颜色分配给所有值,其中 Dataframe 中有更多对应的颜色/值。正确的绘图应该在 x 轴上有时间戳,并且每个条件的条形段都有正确的颜色。

fig = plt.figure()
ax = fig.add_subplot(111)
df.plot.bar(stacked=True, rot=1, legend=False, ax=fig.gca(), colors=color_list)

我将不胜感激任何帮助,在此先感谢您。

标签: pythonpandasdataframematplotlibbar-chart

解决方案


我不知道颜色的选择对你来说有多重要。我刚刚找到了一个似乎可以解决您的问题的解决方案,唯一的“但是”是如果您接受其中一种可用的颜色模式,开发会更容易。另外,如果您必须手动制作颜色图,您可以从 matplotlib.colors 中找到带有 LinearSegmentedColormap 的示例。

编码:

    import matplotlib.pyplot as plt
    from matplotlib.cm import ScalarMappable

    data_color = [0.,1.,2.,3.,4.,5.] #data range from conditions columns
    data_color = [x / max(data_color) for x in data_color]   

    custom_map = plt.cm.get_cmap('Accent') #one of the color schemas stored
    custom = custom_map(data_color)  #mapping the color info to the variable custom

    fig = plt.figure()
    ax = fig.add_subplot(111)
    df.plot.bar(stacked=True, rot=1, legend=False, ax=fig.gca(), color=custom)

    plt.show()

显示器:

在此处输入图像描述


推荐阅读