You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多索引DataFrame基于y值创建颜色映射?

多索引列DataFrame条形图实现按值映射颜色的问题

我已经能在单索引DataFrame中实现条形图颜色按值映射的需求,代码如下:

func_df=pd.DataFrame(pd.concat([df[col].sort_values().iloc[1::2],df[col].sort_values().iloc[-1::-2]]))

fig, ax = plt.subplots(figsize=fig_size)

my_cmap = plt.cm.get_cmap('afmhot_r')

colors = my_cmap(func_df[col])

rects = ax.bar(x=func_df[col].index,
               height=func_df[col], color=colors)

此时colors返回的数组为:

array([[1.        , 0.84901961, 0.34901961, 1.        ],
       [0.58039216, 0.08039216, 0.        , 1.        ],
       [0.47843137, 0.        , 0.        , 1.        ],
       [0.22745098, 0.        , 0.        , 1.        ],
       [0.58039216, 0.08039216, 0.        , 1.        ],
       [1.        , 0.66862745, 0.16862745, 1.        ],
       [1.        , 1.        , 0.56862745, 1.        ]])

这段代码能生成颜色与柱高关联的条形图。

现在我有一个带多索引列的DataFrame,用一行代码就能生成多组条形图:

df.loc[:,(['Covid','Malaria','TB'],['AgOr1'])].plot.bar()

但尝试给这个多组条形图应用按值映射的颜色时:

my_cmap = plt.cm.get_cmap('afmhot_r')
colors = my_cmap(df.loc[:, pd.IndexSlice[:, ['AgOr1']]].fillna(0))

df.loc[:,(['Covid','Malaria','TB'],
['AgOr1'])].plot.bar(color=colors)

出现了如下错误:

ValueError: Invalid color [[0.58039216 0.08039216 0.         1.        ]
 [0.58039216 0.08039216 0.         1.        ]
 [1.         1.         1.         1.        ]]

我猜测是df.plot.bar(color=colors)无法处理我生成的颜色映射数组,或者是我的操作有误,但作为Python新手不知道怎么解决,希望能得到可测试的解决思路。


附DataFrame示例数据

df.head(20).to_dict(orient='list')

Output:
{('Covid', 'AgOr1'): [0.05633802816901407,
  0.061459667093469894,
  0.2676056338028169,
  0.1024327784891165,
  0.048655569782330335,
  0.10627400768245837,
  0.00768245838668373,
  nan,
  nan,
  nan],
 ('Covid', 'AgOr2'): [0.02933673469387755,
  0.012755102040816327,
  1.0,
  0.012755102040816327,
  0.005612244897959183,
  0.030612244897959183,
  0.02933673469387755,
  nan,
  nan,
  nan],
 ('Covid', 'AgOr3'): [0.5092592592592592,
  0.537037037037037,
  0.48148148148148145,
  0.7037037037037037,
  0.7962962962962963,
  0.7685185185185185,
  0.25925925925925924,
  nan,
  nan,
  nan],
 ('Covid', 'AgOr4'): [0.04524699045246991,
  0.20921544209215445,
  0.27148194271481946,
  0.0660024906600249,
  0.13864674138646743,
  0.026567040265670402,
  0.5848899958489,
  nan,
  nan,
  nan],
 ('Covid', 'AgOr5'): [0.04418604651162791,
  0.034883720930232565,
  0.09627906976744185,
  0.043255813953488376,
  0.13953488372093023,
  0.06744186046511629,
  0.02325581395348838,
  nan,
  nan,
  nan],
 ('Malaria', 'AgOr1'): [0.05633802816901407,
  0.061459667093469894,
  0.2676056338028169,
  0.1024327784891165,
  nan,
  nan,
  nan,
  0.04993597951344429,
  0.09603072983354671,
  nan],
 ('Malaria', 'AgOr2'): [0.02933673469387755,
  0.012755102040816327,
  1.0,
  0.012755102040816327,
  nan,
  nan,
  nan,
  0.047193877551020405,
  0.10969387755102039,
  nan],
 ('Malaria', 'AgOr3'): [0.5092592592592592,
  0.537037037037037,
  0.48148148148148145,
  0.7037037037037037,
  nan,
  nan,
  nan,
  0.37037037037037035,
  0.6203703703703703,
  nan],
 ('Malaria', 'AgOr4'): [0.04524699045246991,
  0.20921544209215445,
  0.27148194271481946,
  0.0660024906600249,
  nan,
  nan,
  nan,
  0.27563304275633044,
  0.2673308426733085,
  nan],
 ('Malaria', 'AgOr5'): [0.04418604651162791,
  0.034883720930232565,
  0.09627906976744185,
  0.043255813953488376,
  nan,
  nan,
  nan,
  0.034883720930232565,
  0.04883720930232559,
  nan],
 ('TB', 'AgOr1'): [nan,
  nan,
  nan,
  0.1024327784891165,
  0.048655569782330335,
  nan,
  0.00768245838668373,
  nan,
  nan,
  0.07682458386683737],
 ('TB', 'AgOr2'): [nan,
  nan,
  nan,
  0.012755102040816327,
  0.005612244897959183,
  nan,
  0.02933673469387755,
  nan,
  nan,
  0.022959183673469385],
 ('TB', 'AgOr3'): [nan,
  nan,
  nan,
  0.7037037037037037,
  0.7962962962962963,
  nan,
  0.25925925925925924,
  nan,
  nan,
  0.41666666666666663],
 ('TB', 'AgOr4'): [nan,
  nan,
  nan,
  0.0660024906600249,
  0.13864674138646743,
  nan,
  0.5848899958489,
  nan,
  nan,
  0.2922374429223745],
 ('TB', 'AgOr5'): [nan,
  nan,
  nan,
  0.043255813953488376,
  0.13953488372093023,
  nan,
  0.02325581395348838,
  nan,
  nan,
  0.018604651162790704]}

内容的提问来源于stack exchange,提问作者JayJay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:27:28