在条形图中突出显示特定的条形

时间:2018-10-22 14:37:40

标签: python pandas matplotlib

我有两个数据帧try...exceptdf1df2df2的子集。我想绘制df1的水平条形图,已确定了df1行(不同的条形或其他颜色)。谢谢。

df2

2 个答案:

答案 0 :(得分:0)

我认为方法是连接数据框并为缺失值附加nans

import pandas as pd
import matplotlib.pyplot 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"])

plotThis = pd.concat([df1, df2], axis = 1, ignore_index = True)

plotThis.plot(kind = 'barh')

答案 1 :(得分:0)

不幸的是,熊猫的barh函数不允许我们为每个条选择不同的颜色。 But since that seems to be the case,我会选择使用熊猫绘图功能,而是直接使用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)

enter image description here

@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

对该数据框进行绘图将生成所需的输出。 enter image description here