如何为pandas单栏barh水平柱状图单独指定各条形的颜色
pandas水平柱状图指定条形修改颜色解决方案
实现逻辑:pandas绘图返回的Axes对象中,所有条形都存储在patches属性列表里,水平柱状图barh的列表顺序为从下到上,和DataFrame的索引顺序完全对应,直接对指定位置的条形调用set_color()方法修改颜色即可,无需改动原有DataFrame结构、也不会破坏原有绘图布局参数。
代码示例
import pandas as pd import matplotlib.pyplot as plt # 构造DataFrame columns = ["Foo"] data = [50, 201, 279] index=["Item 1", "Item 2", "Item 3"] df = pd.DataFrame(data=data, index=index, columns=columns) # 原有绘图逻辑完全不变 ax = df.plot(kind="barh", color="#00576B", rot=0, legend=False, align='center', width=0.5) ax.set_title("My title") ax.set_ylabel("") ax.set_xlabel("My label in foo") ax.grid(True) ax.set_axisbelow(True) # 仅新增以下代码修改指定条形颜色 # 例:将Item 2(对应索引1,从0开始计数)改为红色,Item 3(对应索引2)改为橙色 ax.patches[1].set_color("#FF4C4C") ax.patches[2].set_color("#FF9500") plt.show()
按索引名批量配置颜色
如果不想手动记索引顺序,可直接基于DataFrame的索引名映射颜色:
color_mapping = { "Item 1": "#00576B", "Item 2": "#FF4C4C", "Item 3": "#FF9500" } for idx, index_name in enumerate(df.index): ax.patches[idx].set_color(color_mapping[index_name])
内容的提问来源于stack exchange,提问作者Cord Kaldemeyer
相关产品推荐
相关产品推荐

