【问题标题】:Matplotlib : how to plot a horizontal bar chart with color defined by groupsMatplotlib:如何绘制由组定义颜色的水平条形图
【发布时间】:2021-04-23 07:57:57
【问题描述】:
我目前正在努力通过 matplotlib 水平条形图中的一组条形设置颜色。
我有这个数据框作为输入:
dataframe
到目前为止,我将此输出作为图表:
graph
我想做的是根据组定义条形的颜色,并保持条形按值排序(从最高到最低)。例如,Luc、Shan...(A 组)的条形将显示为红色,B 组将显示为蓝色...
当然,组的数量可以改变(目前有 4 个组,但可能是 5,6 或其他)。我还想添加一个图例。
我已经尝试了很多来解决这个问题,但我在互联网上找不到任何关于我的问题的信息。
【问题讨论】:
标签:
python
matplotlib
bar-chart
【解决方案1】:
Pandas.plot.barh 接受一个颜色参数,它可以是每个表格行的颜色系列(使用.replace(map_group_color) 创建)。图例是使用 matplotlib 补丁添加的,这是一种手动添加图例的标准方式。
import matplotlib.patches as mpatches
data = pd.DataFrame({"name": ["A", "B", "C"],
"value": [1, 5, 3],
"group": ["a", "a", "x"]})
data = data.sort_values("value")
map_group_color = {"a": "green", "x": "red"}
ax = data.plot.barh(x="name", y="value",
color=data.group.replace(map_group_color))
legend_handles = [mpatches.Patch(color=color, label=group)
for group, color in map_group_color.items()]
ax.legend(handles=legend_handles)