首页 > 解决方案 > 突出显示条形图中的特定条形

问题描述

我有两个数据框df1df2. df2是 的子集df1。我想绘制df1已识别df2行的水平条形图(不同的条形颜色或其他东西)。谢谢你。

%matplotlib inline 
import pandas as pd
import matplotlib as plt

d1 = {
    'index' : [1, 2, 3, 4, 5], 
    'col1'  : [5, 8, 6, 4, 2]
}

d2 = {
    'index' : [3, 5], 
    'col1'  : [6, 2]
}

df1 = pd.DataFrame(d1).set_index(["index"])
df2 = pd.DataFrame(d2).set_index(["index"])

df1.plot(kind="barh", grid=False)

标签: pythonpandasmatplotlib

解决方案


不幸的是,pandas 的barh功能不允许我们为每个条形选择不同的颜色。但既然情况似乎如此,我会选择使用 pandas 绘图功能,而是直接使用 matplotlib 的功能。

在这种情况下,有很多方法可以达到预期的效果。这是一种选择:

fig, ax = plt.subplots()
c = ['C2' if i in df2.index else 'C1' for i in df1.index]
ax.barh(y=df1.index,width=df1.col1,color=c)
ax.grid(False)

在此处输入图像描述

@GlobalTraveler 的回答让我想到了另一种解决方案

df3 = df1.loc[df1.index.difference(df2.index)].append(df2, sort=False).sort_index()
df3.plot(kind='barh', stacked=True, grid=False)

第一行创建一个包含以下内容的新数据框:

    col1    col2
index       
1   5.0     NaN
2   8.0     NaN
3   NaN     6.0
4   4.0     NaN
5   NaN     2.0

绘制此数据框会产生所需的输出。 在此处输入图像描述


推荐阅读